累乘问题
#include <stdio.h>int main()
{
long int i , s, n , m;
i = 1 , s = 1 , m =0;
printf("input number:\n");
scanf("%ld",&n);
for(i=1;i<=n;i++)
{ s *= i;
m += i;
}
printf("这个数的阶乘=%ld\n", s);
printf("累加=%ld\n",m);
}
为什么很大的数的累乘为零 因为数值太大溢出了吧。。。。。。。。
long int范围是-2147483648~+2141483647 数据溢出 Charles未晞 发表于 2018-4-11 23:02
因为数值太大溢出了吧。。。。。。。。
long int范围是-2147483648~+2141483647
怎么个改法 数据类型都是有一定的范围的,具体可以看小甲鱼的带你学c带你飞的扩展阅读和读书笔记,那个说的很是详细的{:10_256:} 不主动 发表于 2018-4-12 13:11
怎么个改法
简单来说,定义的类型允许到一定的范围数值,但是你超过了这个范围,当然就出来了(数据溢出)。
int 不够了用 long int 不够用char存储吧总会有上限值的 如果变量的话 适当也加大内存大小 数据太大 理想小青年 发表于 2018-4-12 15:57
简单来说,定义的类型允许到一定的范围数值,但是你超过了这个范围,当然就出来了(数据溢出)。
int 不 ...
还是不对呢{:10_250:} 不主动 发表于 2018-4-12 19:36
还是不对呢
数据类型小了,阶乘到10就已经非常大了,用long double试试
页:
[1]