我用C语言写了一个计算n!,即n的阶乘的小程序,出现了一些问题,请帮我改一下。

我输入整数的时候,1~12得到的值都是对的,从13开始得数就不对了,我知道是整型变量存储的数据超出范围了,应该怎么处理?下面是代码。
#include <stdio.h>
int main()
{
int m=1, k, n, o=1; //n:公式中的n; m:动态的结果; o:执行的次数 k:动态的被乘数
printf("请输入一个n的值:\n");
scanf("%d", &n);
int njy=n-1; //njy:即“n-1”
while(o<=njy)
{
printf("%d*", o);
k=o++;
m=m*k;
}
m=m*n;
printf("%d=%d\n", n, m);
printf("按任意键退出\n");
getch();
return 0;
}
上面的代码我考虑到了运行的时候动态显示过程,即输入3,就显示1*2*3=6,而不是直接显示6,所以定义了n-1.
我把编译好的EXE文件上传到了网盘,各位不方便编译的可以直接下载运行,网盘地址:
http://pan.baidu.com/s/1jGgfrp0

#include <stdio.h>
int main()
{
int k, n, o=1; //n:公式n; m:态结; o:执行数 k:态乘数
double m=1; //用double类型可以支持的数据多些
printf("请输入n值:\n");
scanf("%d", &n);
int njy=n-1; //njy:即n-1
while(o<=njy)
{
printf("%d*", o);
k=o++;
m=m*k;
}
m=m*n;
printf("%d=%.0lf\n", n, m);
printf("按任意键退\n");
getch();
return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-08-21
变成无符号的,%d变成%ud.int前面加个无符号的英文(我不知道咋拼.我用的时候都是复制的)VC++中long和int的大小一样.如果不是VC++你就加个long long(%llu).如果是VC++,你用无符号long double.
第2个回答  2014-08-21
#include <stdio.h>
int main()
{
int k, n, o=1;
float m=1; //n:公式中的n; m:动态的结果; o:执行的次数 k:动态的被乘数
printf("请输入一个n的值:\n");
scanf("%d", &n);
int njy=n-1; //njy:即“n-1”
while(o<=njy)
{
printf("%d*", o);
k=o++;
m=m*k;
}
m=m*n;
printf("%d=%.0f\n", n, m);
printf("按任意键退出\n");
return 0;
}
第3个回答  2014-08-21
知道是数据超出存储范围的话就将存储最终结果的变量m定义为unsigned int
第4个回答  2014-08-21
可能是越界了,换一个数据类型就好了,将m声明成float类型,注意输出
相似回答