C++编程《第12课 高精度加减法》教学课件.pptxVIP

  • 0
  • 0
  • 约2.83千字
  • 约 17页
  • 2026-03-10 发布于广西
  • 举报

C++编程《第12课 高精度加减法》教学课件.pptx

第12课高精度加减法

学习目标学会高精度加法的基本使用学会高精度减法的基本使用

知识讲授

高精度加减法高精度的加减法,主要是用于求解数据特别大的相关题目的结果。比如让你求两个数字的和,但是两个数字数位都超过了1000位。这种情况下我们就没有办法用int或者longlong去存储数据了,因此我们可以用字符串或者字符数组来存放两个数字来解决。高精度的加减法,和我们数学上的列竖式的原理是一致的,接下来我们就一起来看一看其中的奥秘吧。

大数字加法,两个非负数字相加。高精度加法实例

参考代码#includeiostream#includecmathusingnamespacestd;strings1,s2;inta[10001],b[10001],c[10001];voidPlus();intmain(){cins1s2;a[0]=s1.size();b[0]=s2.size();for(inti=1;i=a[0];i++)a[i]=s1[a[0]-i]-0’;for(inti=1;i=b[0];i++)b[i]=s2[b[0]-i]-0’; Plus();for(inti=c[0];i=1;i--)coutc[i];coutendl;return0;}

参考代码voidPlus(){c[0]=max(a[0],b[0]);intjw=0,k;for(inti=1;i=c[0];i++){//相加 k=a[i]+b[i]+jw;//相加结果 c[i]=k%10;//存进结果数组 jw=k/10;//计算进位} if(jw!=0){//处理最高位的进位 c[0]++; c[c[0]]=jw;}}

两个非负大数相减。结果为负数就输出负数。课堂练习2高精度减法实例

参考代码#includeiostream#includecmathusingnamespacestd;strings1,s2,p1,p2;inta[100001],b[100001],c[100001],flag;voidSub(){c[0]=a[0];//保证a是比较大的数字for(inti=1;i=c[0];i++){//相减if(a[i]b[i]){a[i]+=10;a[i+1]--; }c[i]=a[i]-b[i];} while(c[c[0]]==0c[0]1)//处理开头的0,并防止结果为0c[0]--;}

参考代码intmain(){cins1s2;if(s1.size()s2.size()){//保证s1比较大flag=1;//标记,结果为负输出负号swap(s1,s2);}elseif(s1.size()==s2.size()){if(s1s2){flag=1;//标记,结果为负输出负号swap(s1,s2);}}a[0]=s1.size();b[0]=s2.size();for(inti=1;i=a[0];i++)a[i]=s1[a[0]-i]-0;for(inti=1;i=b[0];i++)b[i]=s2[b[0]-i]-0; Sub();if(flag==1)cout-;for(inti=c[0];i=1;i--)coutc[i];coutendl;return0;}

课堂练习

求斐波那契数列第n项的值。(大整数加法)输入n,输出斐波那契数列第n项值。n=500。课堂练习

参考代码#includeiostream#includecmathusingnamespacestd;strings[1005]={0,1,1,2,3};stringPlus(strings1,strings2){stringans;inta[100001],b[100001],

文档评论(0)

1亿VIP精品文档

相关文档