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

我输入整数的时候,1~12得到的值都是对的,从13开始得数就不对了,我知道是整型变量存储的数据超出范围了,应该怎么处理?下面是代码。#include<stdio.h>in... 我输入整数的时候,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
展开
 我来答
kaixingui2012
推荐于2016-05-25 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6464万
展开全部
#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;
}
文正153
2014-08-21 · TA获得超过2.1万个赞
知道大有可为答主
回答量:2221
采纳率:63%
帮助的人:635万
展开全部
变成无符号的,%d变成%ud.int前面加个无符号的英文(我不知道咋拼.我用的时候都是复制的)VC++中long和int的大小一样.如果不是VC++你就加个long long(%llu).如果是VC++,你用无符号long double.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
你不会懂TOT
2014-08-21 · TA获得超过169个赞
知道答主
回答量:56
采纳率:0%
帮助的人:41.3万
展开全部
#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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
18号VS克
2014-08-21
知道答主
回答量:1
采纳率:0%
帮助的人:1344
展开全部
知道是数据超出存储范围的话就将存储最终结果的变量m定义为unsigned int
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-08-21
展开全部
可能是越界了,换一个数据类型就好了,将m声明成float类型,注意输出
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式