当前位置: 首页 > news >正文

C语言典型例题52

《C程序设计教程(第四版)——谭浩强》

题目:


例题4.4 相传古代印度国王舍罕要褒奖他聪明能干的宰相达依尔(国际象棋发明者),问他需要什么,达依尔回答说:“国王只要在国际象棋的棋盘的第一个格子里放一粒小麦,第二个格子里放两粒小麦,第三个格子里放四粒小麦,以后按照此比例每一格加一倍,一直放第64格(国际象棋的棋盘是64*64),我就感激不尽了,其他的我什么也不要。”国王想:“这能有多少,太容易了!”让人扛了一袋小麦,但不到一会就用完了,再来一袋也很快就用完了,结果全印度的粮食还完还不够,国王纳闷,怎么也算不清这笔账。
请编写程序,帮国王算算一共需要多少麦子。


解题思路:

(1)解读题目:

每一个格子放要求放的麦子

(要求:后一格麦子的数量前一格麦子数量的一倍,且第一格麦子数量为1,第二格麦子数量为2……)

格子麦子数推导规律
111(2ⁿ,n=0)2ⁿ,n=第几个格子-1
22
34
48
5162ⁿ(n=4)
6322ⁿ(n=5)
…………
642ⁿ(n=64-1)

(2)代码思路解析:

1.需要有一个数(x)表示每一项的麦子数

int x=0;

2.需要有一个数(sum)来储存麦子数的和

int sum=0;

3.需要一个循环,这个循环需要实现循环64次,并且x的每一项为2ⁿ,然后还要将每一项相加求出和

代码:

//《C程序设计教程(第四版)——谭浩强》
//例题4.4 相传古代印度国王舍罕要褒奖他聪明能干的宰相达依尔(国际象棋发明者),问他需要什么,
//达依尔回答说:“国王只要在国际象棋的棋盘的第一个格子里放一粒小麦,第二个格子里放两粒小麦,第三个格子里放四粒小麦,以后按照此比例每一格加一倍,一直放第64格(国际象棋的棋盘是64*64),我就感激不尽了,其他的我什么也不要。”
//国王想:“这能有多少,太容易了!”让人扛了一袋小麦,但不到一会就用完了,再来一袋也很快就用完了,结果全印度的粮食还完还不够,国王纳闷,怎么也算不清这笔账。
//请编写程序,帮国王算算一共需要多少麦子。#include <stdio.h>
#include <math.h>int main()
{double x=0;//64项中每一项的大小double sum=0;//64项的总和int i=0;for(i=0;i<=63;i++){x=pow(2,i);sum=sum+x;}printf("第64格的麦子数为\n%22.16e\n",sum);return 0;
}

运行结果:

结果分析:

麦子数为:1.84467441*10的19次方

代码编写过程中遇到的问题:

麦子数结果的表示:

初始代码:
//*******错误代码*******//
#include < stdio.h>
#include < math.h>int main()
{long long int x=0;//64项中每一项的大小long long int sum=0;//64项的总和int i=0;for(i=0;i<=63;i++){x=(long long int)pow(2,i);//错误1sum=sum+x;}printf(“%lld\n”,sum);//错误2返回 0;
}
错误1:

pow函数是表示指数的函数,它的返回值默认是一个double类型的数,如果需要的值是其他类型的,需要对其进行强制类型转换

错误2:

(1)如果是longlongint类型的数,输出是用%lld

(2)long long int类型的数的最大值:9223372036854775807
                                      最小值:-9223372036854775808

(3)结果特别特别大的时候超越了longlongint的上限,就会产生整数溢出

怎么解决??

将特别大的数打印出来的时候写成科学计数法的形式,即用%e来打印,但是这时,它的类型必须为double类型,e后面是什么数字,e前面的那个数的10的多少次方


http://www.mrgr.cn/news/11052.html

相关文章:

  • Midjourney推出网页版编辑器应对Ideogram 2.0冲击
  • 目标小程序和当前小程序主体必须为绑定在同一0pen下的相关或关联主体
  • 大数据技术之Flume事务及内部原理(3)
  • 6U VPX总线架构:搭载飞腾D2000/FT2000 + FPGA-K7(赛灵思)
  • 如何自己通过java实现一个rpc框架?简单例子
  • docker基本环境搭建
  • 谷粒商城篇章11--P311-P325--秒杀服务【分布式高级篇八】
  • 从etcd学习raft
  • 移动式气象站:科技赋能,监测天气
  • sheng的学习笔记-AI-半监督SVM
  • 远程线程注入--DLL注入(C++)
  • springboot集成quartz实现配置化定时任务
  • C++学习笔记----5、重用之设计(二)---- 为最优化重用结构化你的代码(1)
  • 微信小程序主体变更(迁移)法人无法配合扫脸怎么办?
  • 如何定义、注册以及什么是异步组件?
  • 使用xinference部署自定义embedding模型(docker)
  • 在PCDN网络中,如何保证数据的完整性?
  • 数据库监控运维方案,保障高性能及高可用
  • 金融工程--基础概念--期货知识
  • nuxt3连接mongodb操作