s-1900 发表于 2018-8-17 10:17:12

第六节课后动手题


非常奇怪,我觉得我打的跟答案一样,但就是显示结果不一样

claws0n 发表于 2018-8-17 10:22:26

溢出了,C 的 math 要到 C11 吧才支持,一般只支持到 double。试试这个
temp = (unsigned long long)pow(2,i); // 强制转换,确保类型一致
下面 printf()   请确保是小写 L,看起来像 1 。

shaungzhi20 发表于 2018-8-17 12:15:19

我也感觉你的%llu看起来像1,不知道是不是字体的问题,我用vim小写L是有点弯弯的尾巴

关键是感觉 发表于 2018-8-17 12:20:56

本帖最后由 关键是感觉 于 2018-8-17 12:29 编辑

#include<stdio.h>
int main(){
        long long b=2;
        long long c=1;
        int i;
        for(i=1;i<64;i++){       
                printf("%d %llu\n",i,b<<i-1);
                c+=b<<i-1;
        }
        printf("%llu %llu\n",c,(unsigned long long)c/25000);
}
感觉这样看起来好理解一点。
64个格子
第一个格子 1粒
第二个格子 2粒
第三个格子 4粒
第N个格子M粒
其实就是 2^0 2^1 2^2 2^3 2^N次方
不需要pow()函数,为什么不使用pow函数?查看pow原型:extern float pow(float x, float y); ,带入所有的参数都需要转换成float
使用位移就能搞定
2D 10B
4D 100B
8D 1000B
16D 10000B
32D 100000B
左移规律。

结了霜的泪 发表于 2018-8-17 13:57:24

@小甲鱼,论坛有BUG。。就像楼主这样的上来就放一张图的帖子,打开后一直有提示下载图,看不到标题了啊。。

s-1900 发表于 2018-8-19 10:28:30

非常感谢大家的帮忙
页: [1]
查看完整版本: 第六节课后动手题