Juniorboy 发表于 2020-4-12 19:42:25

代码问题

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

int main ()
{
   _int64 sum = 0,weight;
   int i;
   for (i = 0;i<64;i++)
   {
      sum =sum +pow(2,i);
   }
    weight = sum / 25000;

printf("麦子的总数=%llu\n王得给他%llu公斤麦子",sum,weight);
getchar();
getchar();
return 0;

}
请问为什么输出都是零呢

永恒的蓝色梦想 发表于 2020-4-12 19:47:51

不是很知道,但是printf("麦子的总数=%llu\n王得给他%llu公斤麦子",sum,weight);你定义的_int64,不是应该用%lld嘛?

Juniorboy 发表于 2020-4-12 20:27:55

永恒的蓝色梦想 发表于 2020-4-12 19:47
不是很知道,但是你定义的_int64,不是应该用%lld嘛?

欸,我没发现,对哈,谢谢啦

永恒的蓝色梦想 发表于 2020-4-12 21:08:05

本帖最后由 永恒的蓝色梦想 于 2020-4-12 21:12 编辑

我知道了,long装不下,得用unsigned long

给你我的代码:#include<stdio.h>

int main(){
    unsigned long sum=0,ing=1;
    for(int i=64;i;i--){
      sum+=ing;
      ing<<=1;//相当于 ing*=2;
    }
    printf("麦子的总数=%llu\n王得给他%llu公斤麦子",sum,sum/25000);
    return 0;
}满意请选为最佳哦~

sunrise085 发表于 2020-4-12 21:50:55

因为溢出了,这个运算正确结果应该是2^64-1
_int64 的取值范围是-2^63~2^63-1
应该用unsigned long long 它的取值范围是0~2^64-1

程序中还用到除法,最好是用float或者double类型
页: [1]
查看完整版本: 代码问题