这只是一个测试C程序,我希望它计算13位数字的乘积
#include <stdio.h>
#include <stdlib.h>
int main ()
{
long prod;
prod = 5*5*7*6*6*8*9*6*6*4*8*9*5;
printf ("%ld\n", prod);
system("pause");
return 0;
}
但它只是说
[警告]表达式[-Woverflow]中的整数溢出
该程序运行了,但是它显示的产品价值与真实的价值截然不同...我试图将int和long int更改为float和double,但不确定下一步该怎么做。
答案 0 :(得分:4)
在这种情况下,更改结果的类型无济于事。
问题在于,由于所有输入值均为int
,因此仅进行过int
大小的乘法(然后,如果将其分配给double
或其他任何值,结果会转换为double
-但只有之后溢出。
如果您以较大的类型 start 开始,则乘法将以该较大的类型完成:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
unsigned long long prod;
prod = 5ull*5*7*6*6*8*9*6*6*4*8*9*5;
printf ("%llu\n", prod);
system("pause");
return 0;
}