题目描述:阿基米德与国王下棋的故事
有一位国王与数学家阿基米德下棋。国王说我们这样干下棋好象不够刺激,要么赌点什么吧!阿基米德说好啊。国王说,如果我下赢了,你就给我打一辈子长工。阿基米德说行啊。国王问阿基米德,那你要是赢了呢?阿基米德看了看国王家的粮仓,说:我要是赢了,你就在棋盘格子里放上米粒就行了。国王问:怎么个放法呀?阿基米德说:棋盘一共就这么多格子,你要是输了,就在第一个格子里放一粒米,在第二个格子里放两粒米,在
第三个格子里放四粒米,以此类推,以后每个格子放的米粒都是上一格的一倍,放完就行了。国王心想,我家有那么大的粮仓,别说这么个小小棋盘了,就是再大的棋盘也能装得下呀。于是他欣然答应,而且还吩咐手下准备笔墨,跟阿基米德签了约。结果阿基米德赢了棋。国王呢,在兑现承诺的时候才发现,别说他那一个粮仓,就是再多几个粮仓也填不满那个小小的棋盘。
这个故事中阿基米德所应用的
数学原理就是几何倍增原理。这个数学模型的可怕之处在于,如果一个数字大于或等于2,那么按几何级数增加时,其倍增的速率是十分惊人的。如果把第一个格子的一粒米写成2的0次方,第二个格子写成2的1次方,第三个格子写成2的2次方,那么第N个格子就可以写成2的N-1次方。国际象棋一共 64个格子。到了第64个格子的时候,需要放的米粒数就是2的63次方,如果1000粒米有一克重,那么折算一下,第64格就需要放米
9223372036吨。这么大的数字,看来国王只能把国家交出来了。试着编写一个程序,给定非负整数n,
求2”。
#include<math.h>//为数学公式头文件,在c语言里面math.h,里面存储有很多常用数学公式,如果调用这些学公式,则需要增加
#include<math.h>,
answer=pow(2n);//将2n次方的结果赋值给变量 answer,pow(a,b)求a的b次方。
关于#c语言#的问题,如何解决?
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
技术专家团-小桥流水 2022-10-26 16:16关注输入n 求answer的代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <math.h> int main() { int n; double answer; scanf("%d", &n); answer = pow(2.0, n); printf("%lf", answer); return 0; }下面是计算总共需要多少米和重量的代码,你的题目贴的不全,估计是要第一个代码。下面这个代码供参考吧。
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <math.h> int main() { int a; double s = 0; for (a = 1; a <= 64; a++) { s += pow(2.0, a - 1); } printf("国王总共要给%lf粒米\n", s); printf("这些米总共约%.2lf吨\n", s /pow(10.0,9) ); //结果保留2位小数,1000粒米=1克,1千克=10^6,1吨=10^9 return 0; }本回答被题主选为最佳回答 , 对您是否有帮助呢?解决评论 打赏 举报 编辑记录无用 1