|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
#include<math.h>
int main()
{
int t;
unsigned long long int sum=0,weight;
for(t=0;t<64;t++)
{
sum+=pow(2,t);
}
weight=sum/25000;
printf("舍罕王应给予达依尔%llu粒麦子!\n",sum);
printf("如果一公斤小麦有25000粒,舍罕王应给予达依尔%llu公斤麦子!\n",weight);
return 0;
}
这个结果就不对!(原因在第九行那个pow()),请大神解释一下。万分感谢!
- 2251799813685247 + 2251799813685248 = 4503599627370495
- 4503599627370495 + 4503599627370496 = 9007199254740991
- 9007199254740991 + 9007199254740992 = 18014398509481983 // 看这
- 18014398509481984 + 18014398509481984 = 36028797018963968 // 事实上,在这里莫名其妙错了
- 36028797018963968 + 36028797018963968 = 72057594037927936
- 72057594037927936 + 72057594037927936 = 144115188075855872
- 144115188075855872 + 144115188075855872 = 288230376151711744
- 288230376151711744 + 288230376151711744 = 576460752303423488
- 576460752303423488 + 576460752303423488 = 1152921504606846976
- 1152921504606846976 + 1152921504606846976 = 2305843009213693952
- 2305843009213693952 + 2305843009213693952 = 4611686018427387904
- 4611686018427387904 + 4611686018427387904 = 9223372036854775808
- 9223372036854775808 + 9223372036854775808 = 0
- 舍罕王应给予达依尔0粒麦子!
复制代码
- int bar() {
- int t;
- unsigned long long sum = 0, weight;
- for (t = 0; t < 64; t++) {
- unsigned long long current = pow(2, t);
- printf("%22llu + %22llu = %22llu\n", sum, current, sum + current);
- sum += pow(2, t);
- }
- weight = sum / 25000;
- printf("舍罕王应给予达依尔%llu粒麦子!\n", sum);
- printf("如果一公斤小麦有25000粒,舍罕王应给予达依尔%llu公斤麦子!\n", weight);
- return 0;
- }
复制代码
|
|