c语言中数据溢出的问题怎么解决?

#include<stdio.h>
void main()
{
int nMax,count;
printf("Enter the integer number:");
scanf("%d",&nMax);
int n,j;
for(n=0;n<=nMax;n++)
{
count=1;
for(j=1;j<=n;j++)
{
count*=j;
}
printf("%d!=%d\n",n,count);
}
}
这个程序里输入的大一点的数字例如20时就会有溢出的现象,试着把数据类型换为更大的long整形但是还是溢出,求解释。

需要准备的材料分别有:电脑、C语言编译器

1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp,输入问题基础代码。

2、在test.cpp文件中,将int全部调整为long long,printf函数调整为:printf("%lld!=%lld\n",n,count);。

3、编译器运行test.cpp文件,此时成功打印出了大数。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-13
因int 类型的变量的大小只有四个字节,20的阶乘太大了 所以溢出,把count改成 long long型就可以了。

#include<stdio.h>
void main()
{
int nMax;
long long count;
printf("Enter the integer number:");
scanf("%d",&nMax);
int n,j;
for(n=0;n<=nMax;n++)
{
count=1;
for(j=1;j<=n;j++)
{
count*=j;
}
printf("%d!=%lld\n",n,count);
}
}追问

为什么要long long 一个long不行嘛?

追答

long 就是 long int , 也是四个字节,和int 一样 long long 是8个字节的

本回答被提问者采纳
第2个回答  2013-04-02
1:注意各种数据类型的数值范围:比如int型0-65535等;
2:注意不要造成死循环:如:
main()
{
while(1) /*永远循环下去*/
printf("\n");
}
第3个回答  2013-04-02
long 型和int 类型一样都是一个4个字节!!
第4个回答  2013-04-02
你是想求阶层。。。20阶层到int型不会溢出呀。。。32位。大的很

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网