网页是网站的什么颜色好看,服装网站建设论文,网络优化工程师面试题,动漫设计与制作学费转载#xff1a;http://www.du52.com/text.php?id411
在这个大数据的年代里#xff0c;我们不可避免会遇到两个超越正常数据类型#xff08;如int,long,long long#xff09;的整数相加。显然两个大数据已经不能使用传统的加号直接相加#xff0c;但是相加的原理仍然是不…转载http://www.du52.com/text.php?id411
在这个大数据的年代里我们不可避免会遇到两个超越正常数据类型如int,long,long long的整数相加。显然两个大数据已经不能使用传统的加号直接相加但是相加的原理仍然是不变的就是简单的同位相加超9进1.接下来我们将叙述用数组保存的大数据相加的代码。 /* 大数相加超越数据类型范围的也可以进行相加分析 用一维数组解决 1.数据元素的输入 用getchar无限输入字符 从下标0开始 保存元素 保存顺序是高位在前低位在后输入123保存a1[0]1....这里也要把字符转换为整形关系 整数10 1 2.一但遇到进位问题上面这种就会溢出数据无法完全保存所有 把上面的存储顺序改成是 低位在前高位在后如输入123 a[0]3,a[1]2 3.相加操作 把每一位进行相加 这里用已存在的数字对相加结果进行保存输入的数可能长度不一所有数组长度要取最输入最长的4.相加进位问题因是每一位相加结果可能会大于9大于9的就要进行进位操作其它的不变5.显示输出结果问题可能会出现少位数或多位数的这里就用一变量ncount解决 */
#includeiostream
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个 for (int k0,ina-1; i0; i--) // //下标小的保存低位 {a[i] a1[k];k;}cout输入被加数;while ( (b1[j]getchar()) !\n ){b1[j] b1[j]-0;j;}nb j; //保存数组中存入了多少个有效元素 nb-1个///转换存储顺序 for (int k0,jnb-1; j0; j--) // //下标小的保存低位 {b[j] b1[k];k;}// 取得保存相加结果数组的长度/* 如输入12323 我们就要取大数字的位数作为 保存结果数组的小标 不这样就会丢失数据 */ int lengh ; //取数组元素最长的作为保存相加后的结果if (nanb){lengh na;} else{lengh nb;}// 开始执行加法操作for (int m0; mlengh; m){a[m] a[m] b[m]; //两数进行相加 每一位相加 } ///进位处理 ////*如 987 就要进位 数据保存如下a[0]8 ,a[1]9; b[0]7 执行上面的相加操作 结果为 a[0]a[0]b[0]15 ,a[1]a[1]b[1] 909下面为进位处理 lengh 2a[0]15 a[1]91. n0 a[0]9 需进位temp15/101 a[1]a[1]temp 9110 a[0]15%1052.n1 a[1]109 continuetemp 10/101 a[2]011 a[1]10%1003.n2 等于lengh 所有退出 这时相加的结果为a[0]5 a[1]0 a[2]1 输出就是105 */for (int n0; nlengh; n) //进位处理 {if (a[n] 9){int temp a[n]/10;a[n1] a[n1] temp;a[n] a[n]%10;ncount lengh; //进位的话 数组要多一位数字 ,实际上主要是判别是否是最后一位进位}else{ncount lengh-1; //不进位保存结果的数组长度就是 输入数字大的位数长 continue; //不进位就往下走 } }//输出结果/// cout相加结果是;for (int incount; i0; i--) //ncout 解决了显示输出结果问题可能会出现少位数或多位数 {couta[i];}coutendl; system(pause);return 0;
}