第2课 高精度运算

鸣谢!课程内容来自林厚丛老师的《信息学奥赛课课通》

学习目标

  1. 体会高精度运算的应用场合。
  2. 熟练掌握高精度加法和乘法运算。

知识讲解

在编程进行数值运算时,有时会遇到运算的精度要求特别高,远远超过各种数据类型的精度范围;有时数据又特别大,远远超过各种数据类型的极限值。这种情况下,就需要进行“高精度运算”。
高精度运算首先要处理好数据的接收和存储问题,其次要处理好运算过程中的“进位”和“借位”问题。

例题讲解
例1 高精度加法

【问题描述】
输入两个 1000 位以内的正整数,输出它们的和。
【输入样例】
123456789
987654321
【输出样例】
1111111110
【问题分析】
用字符串的方式读入两个高精度数,转存到两个整型数组 a 和 b 中,如图 9.2-1 所示,模拟加法的过程,从低位(第 0 位)开始对应位 a[i] 和 b[i] 相加,同时处理进位,结果存储到另一个数组 c 中。最后,从高位到低位输出 c[i]。

在这里插入图片描述

例2 高精度乘法

【问题描述】
输入两个 100 位以内的正整数,输出它们的乘积。
【输入样例】
123456789
987654321
【输出样例】
121932631112635269
【问题分析】
如图 9.2-2 所示,模拟“竖式”乘法的过程,用一个数的每一位 a[i] (从低位开始)逐位与另一个数的每一位 b[j] 相乘,结果存储到 c[i+j] 位,同时处理好进位。
在这里插入图片描述

例3 n!的精确值

【问题描述】
输入n和m,输出n除以m的精确值。假设n和m在int范围以内,结果精确到小数点后100位。
【输入样例】
355 113
【输出样例】
3.1415929203539823008849557522123893805309734513274336283185840707964601769911504424778761061946902654
【问题分析】
高精度乘以低精度

例4 n/m的精确值

【问题描述】
输入n和m,输出n除以m的精确值。假设n和m在int范围以内,结果精确到小数点后100位。
【输入样例】
355 113
【输出样例】
3.1415929203539823008849557522123893805309734513274336283185840707964601769911504424778761061946902654
【问题分析】
如图 9.2-3 所示,模拟数学中的“短除法”。由数学知识可知,除法运算中被除数、除数和商、余数的关系为:
新的被除数 = 10× 余数
商 = 被除数/除数
余数 = 被除数 % 除数
在这里插入图片描述

实践巩固
1. hanoi 双塔问题(NOIP2007 普及组复赛)
2. 天使的发誓
3. 函数

【题目描述】
数学课上老师定义了一个函数f(n)=1/2+1/3+……1/n+1/(n+1),现在给出一个浮点数c,求使得f(n)>=c的最小的整数n。
【输入】
多组测试数据,每组包含该一个浮点数c。特别地,c=0.0表示结束。
【输出】
对于每组测试数据,输出一个整数n。
【样例输入】
1.00
3.71
0.04
5.19
0.00
【样例输出】
3
61
1
273
【提示】
对100%的数据满足:c<=5.2,测试数据不超过10组。

4. 大学英语水平测试
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值