信息学奥赛一本通算法(C++版)基础算法:高精度计算
信息学奥赛一本通算法(C++版)基础算法:高精度计算
高精度加法(大位相加)
#include
using namespace std;
int main()
{
char a1[100],b1[100];
int a[100],b[100],c[100];//a,b,c分别存储加数,加数,结果
int lena,lenb,lenc,x,i;
memset(a,0,sizeof(a));//数组a清零
memset(b,0,sizeof(b));//数组b清零
memset(c,0,sizeof(c));//数组c清零
//gets(a1);
//gets(b1);
//getchar();
while(scanf("%s%s",&a1,&b1)!=EOF)
{
lena=strlen(a1);
lenb=strlen(b1);
for(i=0;i<=lena;i++)
a[lena-i]=a1[i]-'0';//将数串a1转化为数组a,并倒序存储
//a[i]=a1[lena-i-1]-48;
for(i=0;i<=lenb;i++)
b[lenb-i]=b1[i]-'0';//将数串a1转化为数组a,并倒序存储
//b[i]=b1[lenb-i-1]-48;
lenc=1; //lenc表示第几位
x=0; //x是进位
while(lenc<=lena||lenc<=lenb)
{
c[lenc]=a[lenc]+b[lenc]+x;//第lenc位相加并加上次的进位
x=c[lenc]/10;//向高位进位
c[lenc]%=10;//存储第lenc位的值
lenc++;//位置下标变量
}
c[lenc]=x;
if(c[lenc]==0)
lenc--; //处理最高进位
for(i=lenc;i>=1;i--)
cout< cout< } return 0; } 高精度减法(大位相减) #include using namespace std; int main() { char n[256],n1[256],n2[256]; int a[256],b[256],c[256]; int lena,lenb,lenc,i; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); while(scanf("%s%s",&n1,&n2)!=EOF)//n1为被减数,n2为减数 { if(strlen(n1) { strcpy(n,n1);//将n1数组的值完全赋值给n数组 strcpy(n1,n2); strcpy(n2,n);//处理被减数和减数时,交换被减数和减数cout<<"-";//交换了减数和被减数,结果为负数 } lena=strlen(n1); lenb=strlen(n2); for(i=0;i<=lena;i++) a[lena-i]=(int)(n1[i]-'0');//被减数放入数组a中 for(i=0;i<=lenb;i++) b[lenb-i]=(int)(n2[i]-'0');//减数放入数组b中 i=1; while(i<=lena||i<=lenb) { if(a[i] { a[i]+=10;//不够减,那么向高位借1当10 a[i+1]--; } c[i]=a[i]-b[i];//对应位相减 i++; } lenc=i; while((c[lenc]==0)&&(lenc>1)) lenc--;//最高位的0不输出 for(i=lenc;i>=1;i--) cout< cout< } return 0; } 高精度计算 由于计算机具有运算速度快,计算精度高的特点,许多过去由人来完成的烦琐、复杂的数学计算,现在都可以由计算机来代替。 计算机计算结果的精度,通常要受到计算机硬件环境的限制。例如,pascal 要计算的数字超过19位,计算机将按浮点形式输出;另一方面,计算机又有数的表示范围的限制,在一般的微型计算机上,实数的表示范围为l0-38 -l038。例如,在计算N!时,当N=21时计算结果就超过了这个范围,无法计算了。这是由计算机的硬件性质决定的,但是,我们可以通过程序设计的方法进行高精度计算(多位数计算)。 学习重点 1、掌握高精度加、减、乘、除法。 3、理解高精度除法运算中被除数、除数、商和余数之间的关系。 4、能编写相应的程序,解决生活中高精度问题。 学习过程 一、高精度计算的基本方法 用free pascal程序进行高精度计算,首先要处理好以下几个基本问题:【数据的输入与保存】 (1)一般采用字符串变量存储数据,然后用length函数测量字符串长度确定其位数。 (2)分离各位数位上的数字 分离各数位上的数通常采用正向存储的方法。以“163848192”为例,见下表:A[9] A[8] A[7] A[6] A[5] A[4] A[3] A[2] A[1] 1 6 3 8 4 8 1 9 2 基本原理是A[1]存放个位上的数字,A[2]存放十位上的数字,……依此类推。即下标小的元素存低位上的数字,下标大的元素存高位上的数字,这叫“下标与位权一致”原则。 【计算结果位数的确定】 (1)高精度加法:和的位数为两个加数中较大数的位数+1。 (2)高精度减法:差的位数为被减数和减数中较大数的位数。 (3)高精度乘法:积的位数为两个相乘的数的位数之和。 (4)高精度除法:商的位数按题目的要求确定。 【计算顺序与结果的输出】 高精度加、减、乘法,都是从低位到高位算起,而除法相反。输出结果都是从高位到低位的顺序,注意:高位上的零不输出(整数部分是零除外)。 高精度加法 【参考程序】 var a,b:array[1..10000] of byte; i,w,la,lb:integer; 信息学奥赛一本通题解目录:信息学奥赛取消 第1章 数论1.1 整除1.2 同余1.3 最大公约数1.3.1 辗转相除法1.3.2 进制算法1.3.3 最小公倍数1.3.4 扩展欧几里得算法1.3.5 求解线性同余方程1.4 逆元1.5 中国剩余定理1.6 斐波那契数1.7 卡特兰数1.8 素数1.8.1 素数的判定1.8.2 素数的相关定理1.8.3 Miller-Rabin素数测试1.8.4 欧拉定理1.8.5 PollardRho算法求大数因子1.9 Baby-Step-Giant-Step及扩展算法1.10 欧拉函数的线性筛法1.11 本章习题第2章群论2.1 置换2.1.1 群的定义2.1.2 群的运算2.1.3 置换2.1.4 置换群2.2 拟阵2.2.1 拟阵的概念2.2.2 拟阵上的最优化问题2.3 Burnside引理2.4 Polya定理2.5 本章习题第3章组合数学3.1 计数原理3.2 稳定婚姻问题3.3 组合问题分类3.3.1 存在性问题3.3.2 计数性问题3.3.3 构造性问题3.3.4 最优化问题3.4 排列3.4.1 选排列3.4.2 错位排列3.4.3 圆排列3.5 组合3.6 母函数3.6.1 普通型母函数3.6.2 指数型母函数3.7 莫比乌斯反演3.8 Lucas定理3.9 本章习题第4章概率4.1 事与概率4.2 古典概率4.3 数学期望4.4 随机算法4.5 概率函数的收敛性4.6 本章习题第5章计算几何5.1 解析几何初步5.1.1 平面直角坐标系5.1.2 点5.1.3 直线5.1.4 线段5.1.5 多边形5.1.6 信息学奥赛一本通算法(C++版)基础算法:高精度计算 高精度加法(大位相加) #include 信息学奥赛辅导计划 青少年信息学奥林匹克竞赛是一项旨在推动计算机普及的学科竞赛活动,重在培养学生能力,使学生开阔眼界、扩大知识面,使得有潜质有才华的学生在竞赛活动中得到锻炼和发展。全面提高学生的综合素质,努力培养高素质、高层次创新人才,是我们不断努力的目标。与一般计算机竞赛不同,信息学奥赛是一种综合能力的测试。为了更好培养学生对信息学的爱好和特长,培养学生创造性的用计算机解决实际问题,培养动手动脑能力;也为了全方面,多渠道备战NOIPXX保持我校在信息学竞赛领域市级领先的位置,针对我校学生的实际情况,为了争取在信息学奥赛中争得好成绩,现作如下计划: 一、现状分析: 初三级部社团的同学作为参加比赛的的关键力量严重匮乏,且学习水平一般,而且初三同学本学期四门学科即将中考,初三学生不能参加辅导;大部分学生的重视程度严重不足,还有部分学生在巨大的学习压力面前,选择了放弃,缺乏拼搏精神。初二同学基本语法掌握的比较好,尤其是编程技巧非常的突出,数据结构知识掌握的业非常不错,但是阅读程序能力太差;初一同学刚刚开始信息学奥赛的学习,处于入门阶段。 二、辅导目标: 1、培养学生具有参加全国信息学奥林匹克竞赛分区联赛的能力。 2、培养学生的抽象逻辑推理能力、严谨的思维方式和严密的组织能力,加强对学生的综合素质的提高。 三、辅导对象: 初一至初二年级信息学奥赛社团学生。 四、辅导内容: 1、全面学习scratch编程软件和Pascal 语言的基础知识、程序的调试,使学生能熟练掌握scratch编程软件和Pascal,并熟练应用常用基本算法。 2、深入学习各类算法设计思想,让学生形成一定的分析和解决问题的能力,在算法设计中展开各种数据结构的学习。 3、以实例为基础,展开强化训练,使学生能初步达到灵活运用的程 度,独立解决实际问题。加强与其他学科的合作。信息学竞赛中的信息二字,其实就是计算机对现实世界的数字化表示。用计算机解决现实问题,其中最重要的一步就是数据结构的设计,数据模型的建立、 数学公式的应用,在计算机中是关键。因此,加强与其他学科的横向联系非常必要,特别是数学特长生的培养。 4、初二同学主要训练编程的思维,提高代码的编写速度,训练学生的程序调试水平,提高阅读程序的准确率。特别要关心那些落课较多的同学,不断地鼓励他们,让他们以饱满的热心参加辅导。初一同高精度计算
信息学奥赛一本通题解目录-信息学奥赛取消
信息学奥赛一本通算法(C 版)基础算法:高精度计算资料
信息学奥赛辅导计划
高精度数计算