大数相加问题
发布时间:2020-12-14 03:34:11 所属栏目:大数据 来源:网络整理
导读:?大数相加:超越数据类型范围的也可以进行相加 ? ?分析: 用一维数组解决? ?1.数据元素的输入 用getchar无限输入字符 ,从下标0开始 保存元素 保存顺序是高位在前,低位在后,输入123 ?保存a1[0]=1....这里也要把字符转换为整形,关系 整数1+'0' ='1'? ?? ?
?大数相加:超越数据类型范围的也可以进行相加 ? ?分析: 用一维数组解决? ?1.数据元素的输入 用getchar无限输入字符 ,从下标0开始 保存元素 保存顺序是高位在前,低位在后,输入123 ?保存a1[0]=1....这里也要把字符转换为整形,关系 整数1+'0' ='1'? ?? ? ?2.一但遇到进位问题,上面这种就会溢出,数据无法完全保存,所有 把上面的存储顺序改成是 低位在前,高位在后 ?如输入123 a[0]=3,a[1]=2? ? ?3.相加操作 :把每一位进行相加 这里用已存在的数字对相加结果进行保存,输入的数可能长度不一,所有数组长度要 ?取最输入最长的 ? ?4.相加进位问题:因是每一位相加,结果可能会大于9,大于9的就要进行进位操作,其它的不变 ? ?5.显示输出结果问题:可能会出现少位数或多位数的,这里就用一变量ncount解决? #include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; int main() { int a1[100]; int b1[100]; int a[100]={0}; int b[100]={0}; int na,nb; //保存数组元素的长度 int ncount = 0; //相加后的数组共有多少个元素 int i,j; i = 0; j = 0; ////////////////////输入数据////////////////////////////// cout<<"请输入加数:"; while ( (a1[i]=getchar()) !='n' ) //下标小的保存高位 { a1[i] = a1[i]-'0'; i++; } ///////转换存储顺序 na = i; //保存数组中存入了多少个有效元素 na-1个 int k=0; for (k=0,i=na-1; i>=0; i--) // //下标小的保存低位 { a[i] = a1[k]; k++; } cout<<"输入被加数:"; while ( (b1[j]=getchar()) !='n' ) { b1[j] = b1[j]-'0'; j++; } nb = j; //保存数组中存入了多少个有效元素 nb-1个 ///////转换存储顺序 //int k=0; for (k=0,j=nb-1; j>=0; j--) // //下标小的保存低位 { b[j] = b1[k]; k++; } ////////////////////////// 取得保存相加结果数组的长度//////////////// /* 如输入123+23 我们就要取大数字的位数作为 保存结果数组的小标 不这样就会丢失数据 */ int lengh ; //取数组元素最长的作为保存相加后的结果 if (na>=nb) { lengh = na; } else { lengh = nb; } ////////////////////////// 开始执行加法操作//////////////// for (int m=0; m<lengh; m++) { a[m] = a[m] + b[m]; //两数进行相加 每一位相加 } ///////////////////////////进位处理 /////////////////////////////// /*如 98+7 就要进位 数据保存如下: a[0]=8,a[0]=9; b[0]=7 执行上面的相加操作 结果为: a[0]=a[0]+b[0]=15,a[1]=a[1]+b[1] = 9+0=9 下面为进位处理 lengh =2 a[0]=15 a[1]=9 1. n=0 a[0]>9 需进位 temp=15/10=1 a[1]=a[1]+temp =9+1=10 a[0]=15%10=5 2.n=1 a[1]=10>9 continue temp = 10/10=1 a[2]=0+1=1 a[1]=10%10=0 3.n=2 等于lengh 所有退出 这时相加的结果为:a[0]=5 a[1]=0 a[2]=1 输出就是105 */ for (int n=0; n<lengh; n++) //进位处理 { if (a[n] >9) { int temp = a[n]/10; a[n+1] = a[n+1] + temp; a[n] = a[n]%10; ncount = lengh; //进位的话 数组要多一位数字 } else { ncount = lengh-1; //不进位保存结果的数组长度就是 输入数字大的位数长 continue; //不进位就往下走 } } //////////////////////输出结果/////////////////////////////// cout<<"相加结果是:"; for ( i=ncount; i>=0; i--) //ncout 解决了显示输出结果问题:可能会出现少位数或多位数 { cout<<a[i]; } cout<<endl; system("pause"); return 0; }by ? 吴尚奇 ? 2014/06 ?Devil_box (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- <<BASM 初学者入门>> 第 4 课
- Eclipse:Spring Explorer不显示使用Java文件配置的bean
- Laravel框架中VerifyCsrfToken报错问题的解决
- [译]大数据分析优化保险理赔的六条途径
- delphi – TRegistry – 为什么有些键是可读的而有些键不可
- (POJ2635)The Embarrassed Cryptographer(大数取模)
- lua与c#交互篇(性能)
- 用Perl脚本实现MS批量任务
- kickstart file generate tool use cgi
- php – Auth :: check()似乎在我的Laravel项目中无法正常工