即使在波纹管代码中使用long,大整数也显示错误的输出,但仍显示错误的结果。我怎么能改进?
#include<stdio.h>
#include<conio.h>
void main()
{
long a, b, result;
a=1234;
b=19887815769532909;
result= (0.5)*(a+b)*(a+b+1)*b;
printf("%d", result);
getch();
}
但输出显示如下:-2147483648
我认为我在使用大数字变量做错了。 我也尝试过int但失败了。
请帮忙。
答案 0 :(得分:0)
如评论中所述,您需要在计算中使用long
或long long
。此外,语句result= (0.5)*(a+b)*(a+b+1)*b;
导致整数溢出,这就是为什么将负值打印到控制台(尽管使用%lld
作为格式说明符。您可以查看整数变量的范围{{ 3}}。如果可能,您还应该在计算中检查整数溢出,请阅读here。
但是如果你想对大于标准C基元提供的范围的整数执行操作,你可能想要使用字符或整数数组(将高中方法转换为代码)自己实现它。有很多关于它的教程。
我希望这会有所帮助。