DragonbornV 发表于 2021-3-17 23:25:48

课后作业

#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-17 23:31:22

本帖最后由 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) ;
}

wp231957 发表于 2021-3-18 10:23:41

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]
查看完整版本: 课后作业