白牡丹秀色可餐 发表于 2019-8-18 23:22:44

e1s6

#include<stdio.h>
#include<math.h>

int main()
{
        long int result;
        int i;
        int re;
        result = 2;
        if (i=1;i<64;i++);
        {
                result = result * 2;
                re = re + result;
        }
        re = result / 25000;
        printf("舍罕王需要付给达依尔%ukg麦子",re);
       
        return 0;
}
请问为什么这个运行不了?我已经试了好多遍了,一直找不清错误到底在哪。。。

jackz007 发表于 2019-8-19 01:02:19

本帖最后由 jackz007 于 2019-8-19 01:11 编辑

    最要命的问题是:

      if (i=1;i<64;i++) ;

    应该把语句末尾的分号去掉

    我把程序改了一下,你可以试试看。
#include <stdio.h>

int main()
{
      unsigned __int64 b , re , result                     ;
      int i , k                                          ;

      for(result = 0 , i = 0 ; i < 64 ; i ++) {
                for(b = 1 , k = 0 ; k < i ; k ++) b *= 2   ;
                result += b                                  ;
      }
      re = result / 25000                                  ;
      printf("舍罕王需要付给达依尔:%I64u kg 麦子\n" , re) ;
}


      本代码循环的作用就是计算 result = 2 ^ 0 + 2 ^ 1 + 2 ^ 2 + ... + 2 ^ 63 = 2 ^ 64 - 1 = 0xFFFFFFFFFFFFFFFF = 18446744073709551615,也就是 64 位无符号长整型数的最大极限值。

白牡丹秀色可餐 发表于 2019-8-19 14:41:32

本帖最后由 白牡丹秀色可餐 于 2019-8-19 14:45 编辑

谢谢
页: [1]
查看完整版本: e1s6