为什么结果显示为0
#include<stdio.h>#include<math.h>
int main()
{
unsigned long long sum=0;
unsigned long long temp;
unsigned long long weight;
int i;
for(i=0;i<64;i++);
{
temp=pow(2,i);
sum=sum+temp;
}
weight=sum/25000;
printf("汗舍王应该给%llu粒麦子\n",sum);
printf("如果一公斤为25000千粒,总重量为%lluKG\n",weight);
return 0;
}
for(i=0;i<64;i++); 这里多了个分号导致的,去掉这个分号即可:
#include<stdio.h>
#include<math.h>
int main() {
unsigned long long sum = 0;
unsigned long long temp;
unsigned long long weight;
int i;
for (i = 0; i < 64; i++)
{
temp = pow(2, i);
sum = sum + temp;
}
weight = sum / 25000;
printf("汗舍王应该给%llu粒麦子\n", sum);
printf("如果一公斤为25000千粒,总重量为%lluKG\n", weight);
return 0;
} Twilight6 发表于 2020-8-2 06:53
for(i=0;i
请教,你们回帖都有行号,下面还有“复制代码”,如何做到的? 风过无痕1989 发表于 2020-8-3 00:26
请教,你们回帖都有行号,下面还有“复制代码”,如何做到的?
编辑器有 <> 这个按钮,按这个即可
如何正确地发代码、上传图片和附件?
https://fishc.com.cn/thread-52272-1-1.html
(出处: 鱼C论坛)
Twilight6 发表于 2020-8-3 00:27
编辑器有这个按钮,按这个即可
如何正确地发代码、上传图片和附件?
明白了,我在软件里怎么都找不到<>,原来是在回帖子的时候,谢谢! #include<stdio.h>
#include<math.h>
int main() {
unsigned long long sum = 0;
unsigned long long temp;
unsigned long long weight;
int i;
for (i = 0; i < 64; i++)
{
temp = pow(2, i);
sum = sum + temp;
}
weight = sum / 25000;
printf("汗舍王应该给%llu粒麦子\n", sum);
printf("如果一公斤为25000千粒,总重量为%lluKG\n", weight);
return 0;
} for后面分号,表示结束。大括号里面自成一体。里面所有变量都是新的。与你上面定义的无关。所以后面的sum还是你定义的0,因为出了大括号,这个sum又是你定义的那个sum了。 本帖最后由 baige 于 2020-8-4 15:55 编辑
405794672 发表于 2020-8-4 15:05
for后面分号,表示结束。大括号里面自成一体。里面所有变量都是新的。与你上面定义的无关。所以后面的sum还 ...
. 本帖最后由 baige 于 2020-8-4 16:12 编辑
sum = 2^65-1 = 3.6893488147419e+19
weight = (2^65-1)/25000 = 1.4757395258968e+15
这个时候C/C++的数据类型已经不能存储这么大的数了 本帖最后由 baige 于 2020-8-4 15:31 编辑
unsigend long long 取值范围 , 如果ull类型的整数溢出了,就相当于取模2^64了, 题目中sum = temp = pow(2,64) = 2^64 = 0; baige 发表于 2020-8-4 15:19
溢出而已,都20位数字了
你可以运行一下,这个程序会告诉你sum不等于0
颠覆了我的认知啊!感谢感谢。我试了一下下面这个代码,才知道是什么情况。编译器挺智能的啊。
#include<stdio.h>
#include<math.h>
int main() {
int sum = 0;
{
int sum = 1;
printf("%d\n", sum);
}
printf("%d\n", sum);
return 0;
} 对于pow(2,65)-1刚查了一下对于C/C++的数据类型已经不能存储了
这个时候还是python好
sum = 0
for i in range(0,65):
sum += pow(2,i)
weight = sum / 25000
print('汗舍王应该给'+ str(sum) +'粒麦子')
print('如果一公斤为25000千粒,总重量为'+str(weight)+'KG')
页:
[1]