课后作业
#include <stdio.h>#include <math.h>
int main()
{
unsigned long long int sum = 0;
unsigned int long long weight;
unsigned int long long temp;
int i;
for (i=0; i < 64; i++);
{
temp = pow(2,i);
sum = sum + temp;
}
weight = sum / 25000;
printf("舍罕王应该给予达依尔%11u粒麦子!\n",sum);
printf("如果每25000粒麦子为1kg,那么应该给%11u公斤麦子!\n",weight);
return 0;
}
哪里错了呢? 本帖最后由 jackz007 于 2021-3-18 10:55 编辑
#include <stdio.h>
#include <math.h>
int main(void)
{
unsigned long long i , sum , weight ;
for(sum = i = 0 ; i < 64 ; i ++) sum += (long long) pow(2 , i) ; // pow 前面加上 (long long) 前缀非常关键
weight = sum / 25000 ;
printf("舍罕王应该给予达依尔 %llu 粒麦子!\n" , sum) ; // "llu" 是 "LLU" 的小写
printf("如果每25000粒麦子为1kg,那么应该给 %llu 公斤!\n" , weight) ;
}
编译、运行实况
D:\0002.Exercise\C>g++ -o x x.c
D:\0002.Exercise\C>x
舍罕王应该给予达依尔 18446744073709551615 粒麦子!
如果每25000粒麦子为1kg,那么应该给 737869762948382 公斤!
D:\0002.Exercise\C>
不用 pow() 函数的版本
#include <stdio.h>
int main(void)
{
unsigned long long i , sum , weight ;
for(sum = i = 0 ; i < 64 ; i ++) sum += 1LL << i ;
weight = sum / 25000 ;
printf("舍罕王应该给予达依尔 %I64u 粒麦子!\n" , sum) ;
printf("如果每25000粒麦子为1kg,那么应该给 %I64u 公斤!\n" , weight) ;
} c里操作太大的数据还是有些问题,以下是 python代码及演示结果:
sum=0
for x in range(64):
sum+=2**x
weight = sum // 25000
print("舍罕王应该给予达依尔",sum,"粒麦子!")
print("如果每25000粒麦子为1kg,那么应该给",weight,"公斤麦子!")
'''
结果演示:
D:\我>py test2.py
舍罕王应该给予达依尔 18446744073709551615 粒麦子!
如果每25000粒麦子为1kg,那么应该给 737869762948382 公斤麦子!
'''
页:
[1]