收藏 分享(赏)

[NOIP教案]一、高精度计算.ppt

上传人:精品资料 文档编号:10500058 上传时间:2019-11-23 格式:PPT 页数:40 大小:2.06MB
下载 相关 举报
[NOIP教案]一、高精度计算.ppt_第1页
第1页 / 共40页
[NOIP教案]一、高精度计算.ppt_第2页
第2页 / 共40页
[NOIP教案]一、高精度计算.ppt_第3页
第3页 / 共40页
[NOIP教案]一、高精度计算.ppt_第4页
第4页 / 共40页
[NOIP教案]一、高精度计算.ppt_第5页
第5页 / 共40页
点击查看更多>>
资源描述

1、高精度计算,高精度计算,2,减法,1、输入,高精度 计算,加法,乘法,2、保存,3、长度预处理,4、计算,5、输出,1、输入,2、保存,3、长度预处理,4、计算,5、输出,1、输入,2、保存,3、长度预处理,4、计算,5、输出,Contents,Add Your Text in here,Add Your Text in here,Add Your Text in here,Add Your Text in here,Add Your Text in here,高精度加法,1、以字符数组读入:,char st1501,st2501; scanf(”%s”,st1); scanf(“%s”,st

2、2);,高精度加法,2、倒序保存在数字数组中,int a501,b501,i,len1,len2; memset(a,0,sizeof(a); memset(b,0,sizeof(b); len1=strlen(st1); for(i=1;i=len1;+i)ai=st1len1-i-48; len2=strlen(st2); for(i=1;i=len2;+i)bi=st2len2-i-48;,高精度加法,3、长度预处理,加法:长度为a,b中较长的那位,放入len1中。,if(len1len2) len1=len2;,高精度加法,4、计算,for(i=1;i=len1;+i) ai=ai+b

3、i;ai+1=ai+1+ai/10;ai%=10; ,进位,i+1位上原有的值,/处理最高位alen1上是否有值,确认长度为len1,还是len1+1位。,if(alen1+10) len1+;,高精度加法,5、输出,for(i=len1;i=1;-i)printf(”%d”,ai);,高精度加法,#include #include #include using namespace std; int main() int a501,b501,i,len1,len2;char st1501,st2501;memset(a,0,sizeof(a);memset(b,0,sizeof(b);scan

4、f(“%s“, st1);len1=strlen(st1);for(i=1;i0) len1+;for(i=len1;i=1;-i)printf(“%d“,ai);return 0; ,高精度减法,1、以字符数组读入,由于后面要进行比较两个高精度数的大小,故建议存放在字符串中。,char st1501,st2501; string s1,s2,s; int len1,len2,temp; scanf(”%s”,st1); s1=st1; len1=s1.size(); scanf(”%s”,st2); s2=st2; len2=s2.size(); If(len1len2)|(len1=len

5、2) ,高精度减法,2、倒序保存在数字数组中,int a501,b501,i; memset(a,0,sizeof(a); memset(b,0,sizeof(b); for(i=1;i=len1;+i)ai=s1len1-i-48; for(i=1;i=len2;+i)bi=s2len2-i-48;,高精度减法,3、长度:,len1,高精度减法,4、计算,for(i=1;i=len1;+i) if(aibi)ai+1-;ai+=10;ai=ai-bi; ,借位,/高位上有可能有多个0,while(alen1=0) ,高精度减法,5、输出,for(i=len1;i=1;-i)printf(”%

6、d”,ai);,高精度减法,#include #include #include #include using namespace std; int main() int a501,b501,i,len1,len2,temp;char st1501,st2501;string s1,s2,s;memset(a,0,sizeof(a);memset(b,0,sizeof(b);scanf(“%s“,st1);s1=st1;len1=s1.size();scanf(“%s“,st2);s2=st2;len2=s2.size();,if(len11) len1-;for(i=len1;i=1;-i)

7、printf(“%d“,ai);return 0; ,高精度乘法(一),1、以字符数组读入:,char st1501,st2501; scanf(”%s”,st1); scanf(“%s”,st2);,乘法的输入和保存跟加法完全一样,只是需要多定义一个C数字数组,用于存放最终的乘积。,高精度乘法(一),2、倒序保存在数字数组中,int a501,b501,c501,i,j,len1,len2,lenc; memset(a,0,sizeof(a); memset(b,0,sizeof(b); memset(c,0,sizeof(c); len1=strlen(st1); for(i=1;i=le

8、n1;+i)ai=st1len1-i-48; len2=strlen(st2); for(i=1;i=len2;+i)bi=st2len2-i-48;,高精度乘法(一),3、长度,a的长度为len1,b的长度为len2.,高精度乘法(一),4、计算,for(i=1;i=len1;+i)for(j=1;j=len2;+j)ci+j-1=ci+j-1+ai*bj;ci+j=ci+j+ci+j-1/10;ci+j-1%=10;,进位,/确认c数组的长度,lenc=len1+len2; while(clenc=0,高精度乘法(一),5、输出,for(i=lenc;i=1;-i)printf(”%d”,

9、ci);,高精度乘法(一),#include #include #include using namespace std; int main() int a501,b501,c501,i,j,len1,len2,lenc;char st1501,st2501;memset(a,0,sizeof(a);memset(b,0,sizeof(b);memset(c,0,sizeof(c);scanf(“%s“,st1);len1=strlen(st1);for(i=1;i1) lenc-;for(i=lenc;i=1;-i)printf(“%d“,ci);return 0; ,高精度乘法(二),单个

10、的整数x(0x1000)乘以一个高精度整数。,1、高精度数和x的输入与保存。(与之前的输入保存一致),int a501,i,len,x; char st501; memset(a,0,sizeof(a); scanf(“%d”,高精度乘法(二),2、计算,for(i=1;i=len;+i)ai=ai*x; for(i=1;i=len;+i) ai+1=ai+1+ai/10;ai%=10; ,进位,/确认a数组的长度,len+; while(alen9) alen+1=alen/10;alen%=10;len+; ,高精度乘法(二),3、输出,for(i=len;i=1;-i)printf(”%

11、d”,ai);,高精度乘法(二),#include #include #include using namespace std; int main() int a501,i,len,x;char st501;memset(a,0,sizeof(a);scanf(“%d“,x);scanf(“%s“,st);len=strlen(st);for(i=1;i9)alen+1=alen/10;alen%=10;len+;for(i=len;i=1;-i)printf(“%d“,ai);return 0; ,练习,1、P150例1.6 2、P153第7题。 3、P152页第1题,高精度计算,高精度计算

12、,1、以字符数组读入:,char st1501; scanf(”%s”,st1);,2、倒序保存在数字数组中,int a501,I,len1; len1=strlen(st1); for(i=1;i=len1;+i)ai=st1len1-i-48;,/做减法时,可再放入字符串S1 string s1; s1=st1;,加法与乘法,定义: int I,j,len1,len2,a501,b501;char st1501,st2501;,memset(a,0,sizeof(a); scanf(“%s”,st1); len1=strlen(st1); for(i=1;i=len1;+i)ai=st1l

13、en1-i-48;memset(b,0,sizeof(b); Scanf(“%s”,st2); Len2=strlen(st2); For(i=1;i=len2;+i)bi=st2len2-i-48;,string s1,s1,s; scanf(“%s”,st1); scanf(“%s”,st2); s1=st1; s2=st2; len1=s1.size(); len2=s2.size(); if(len1len2)|(len1=len2),减法,3、长度预处理,加法:长度为a,b中较长的那位,放入len1中。,If(len1len2) len1=len2;,减法:长度最多为len1。,乘法

14、:a的长度为len1,b的长度为len2,结果放入c数组,其长度最多为len1+len2。,4、计算,for(i=1;i0) len1+;,for(i=1;i1)len1-;,for(i=1;i=len1;+i)for(j=1;j=len2;+j)ci+j-1=ci+j-1+ai*bj;ci+j=ci+j+ci+j-1/10;ci+j-1%=10; lenc=len1+len2; while(clenc=0) lenc-;,加法,减法,乘法,5、输出,for(i=lenc;i=1;-i)printf(”%d”,ci);,for(i=len1;i=1;-i)printf(”%d”,ai);,加法

15、和减法,乘法,高精度除法,高精度除低精,1、高精度数以字符数组读入:,char st501; int x; scanf(”%s”,st1);scanf(“%d”,2、顺序保存在数字数组中,int a501,len; memset(a,0,sizeof(a); len=strlen(st); for(i=1;i=len;+i)ai=sti-1-48;,高精度除低精,3、长度预处理,除法:商最多就是高精度数的长度len中。,高精度除低精,4、计算,int yu=0; /yu记录每次的余数,初始值为0 for(i=1;i=len;+i) ai+=yu*10;ci=ai/10;yu=ai%10; ,要加入上次的余数,才是本次的除数,记录下本次的余数,/处理最高位c1上是否有值,确认有效长度。,j=1; while(cj=0,高精度除低精,5、输出,for(i=j;i=len;+i)printf(”%d”,ci);,高精度除低精,#include #include using namespace std; int i,j,len,x,yu; int a1005,c1005; char st1005; int main()scanf(“%s“,st);scanf(“%d“, ,高精度除低精,Thank You !,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报