问题!!!C的啊~(就是简单)

来源:百度知道 编辑:UC知道 时间:2024/06/05 07:19:06
我在写8的阶乘啊~但是出来的是负数啊??
不知道错在何处啊~多多指教啊~
voia main()
{
int a,b,c;
a=1,b=1,c=8;
do
{
b=b*a;
a++;
}
while(a<=c);
printf("%d",b);
}
运行出来的是负数啊~-25216
应该是正的啊~
错在哪里了啊??
郁闷啊~

int a, b; /*a、b被定义为有符号短整型变量*/
signed short int 有符号短整型数说明。简写为short或int, 字长为2字节共16位二进制数, 数的范围是-32768~32767。
8的阶乘>32767

把int a,b,c;改为unsigned short int a,b,c;

int的范围随编译器不同不一样
如果在vc++6.0上是4个字节也就是32位不会溢出
这个应该是溢出了

int类型的范围是-32768到32767
long类型的范围是-2147483648到2147483647
应该使用long型,给你改了一下,运行通过
#include <stdio.h>

void main()
{
long a,b,c;
a=1,b=1,c=8;
do
{
b=b*a;
a++;
}
while(a<=c);
printf("%ld\n",b);
}

#include<stdio.h>
main()
{
long a,b,c;
a=1,b=1,c=8;
do
{
b=b*a;
a++;
}
while(a<=c);
printf("%ld\n",b);
}
我给你改了,哪里不同你自己去看看吧?呵呵,运行结果我也看了:40320

void main()
int a=1;
int i;
for(i=2;i<=8;i++)
{
a=a*i;
}
printf("%d",a);
看看我的吧,还是我的简单

我的机器上运行程序没有问题
结果就是40320