这只是一个测试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;
}
但它只是说
[Warning] integer overflow in expression [-Woverflow]
程序运行但它显示的产品值与真实产品值截然不同...我尝试将 int 和 long int 更改为 float 和 double,但不确定下一步该怎么做。
最佳答案
在这种情况下,更改结果类型无济于事。
问题在于,由于所有输入值都是 int
,因此只会执行 int
大小的乘法(然后,如果将其分配给 double
或其他什么,结果被转换为 double
——但只有在它已经溢出。
如果您开始一个更大的类型,那么乘法将用那个更大的类型完成:
#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;
}
关于c - 当乘以 13 位数字时,表达式中的整数溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54175172/