网站使用方法,设计什么网站简单,爱用建站,我想在阿里巴巴网站开店_怎么做这道题是一道大整数加法#xff0c;涉及到高精度的算法#xff0c;比如说有两个数要进行相加#xff0c;1111111111111111111111111111111111111112222222222222222222222222222222#xff0c;那么如果这两个数很大的话我们常用的数据类型是不能进行计算的#xff0c;那么…这道题是一道大整数加法涉及到高精度的算法比如说有两个数要进行相加1111111111111111111111111111111111111112222222222222222222222222222222那么如果这两个数很大的话我们常用的数据类型是不能进行计算的那么我们就需要另一种方式来进行解决在这里我们可以使用到字符串和数组我们使用字符串对两个数进行存储用数组对字符串中的每个数分开存储那么这样就做到了每位相加变成了个位数与个位数相加大大降低了我们计算的难度我们在这里可以对两个数反序存储因为后续我们进行相加的时候就可以从低位下标从小到大逐位相加方便我们的操作。在我们进行存储的过程中我们需要注意可能会出现前导0那么我们减去字符0即可这样就去除我们的前导0那么接下来我们思考如何实现我们两个数相加的操作我们两个数进行相加的时候可能会有进位的产生那么我们这个时候对两数相加的结果进行除10将结果先赋值给下一位结果既然当前有进位的可能我们就需要将当前结果进行对10取模这样我们一次两数相加的操作就结束了接下来我们循环对两个数组进行此操作即可结束后我们就得到了我们相加的结果那么我们循环的终止条件是什么呢我们循环的终止条件就是结果数组c[]一共有几位想知道结果一共有几位就需要知道两个相加的数一共有几位我们两个数相加最多不超过两个数中最大数的位数1我们结果的位数lc就是max(la,lb)1,在这里我们多留一位预判相加后最高位可能会产生进位如果没有我们再对结果进行特殊处理即可接下来我们就需要求出la,以及我们的lb,在这里我们可以定义一个变量aIndex他表示我们数组加到第几位了如果我们当前遍历的数不为0我们就更新la这样就确定了lalb。最后我们就需要最结果进行输出在对结果进行输出前我们需要对结果数组中的数进行前导0的处理如果我们最高位是0我们就需要对我们的lc进行减减的操作这个操作是需要借助循环进行处理的在这里我们使用while循环的条件就是当前最高位的数如果为0并且我们需要保证位数1的前提下对lc--
这样我们只需要对结果数组反向循环输出即可。
接下来是举例计算过程和代码
第一步对数据进行反序存储如果两个数为123456和111111我们对123456进行输出看看
我们发现确实是反序存储了
第二步对数据进行相加 结果也没有任何问题那么如果是有前导0的两个数呢例如0900和0000900呢
我们发现是有很多前导0的但是在我们对结果数组进行处理之后红色字体去掉了前导0并确定了结果一共有几位之后我们就可以正确的输出结果 以下是AC代码
#include iostream
#include string
using namespace std;
#define int long longint a[210], b[210], c[210];
//a数组 第一个数
//b数组 第二个数
//c数组 结果数组signed main() {string s1, s2; cin s1 s2;//将字符串反序存入数组中int aIndex 1, bIndex 1;int la 1, lb 1,lc;//各个数的实际位数for (int i s1.size() - 1; i 0;i--) {a[aIndex] s1[i] - 0;//去前导0if (s1[i] ! 0) la aIndex - 1;//当前数不是0更新最高位}for (int i s2.size() - 1; i 0; i--) {b[bIndex] s2[i] - 0;if (s2[i] ! 0) lb bIndex - 1;}//将结果进行相加存入c数组中lc max(la, lb) 1;//多加一位预防最高位也产生进位for (int i 1; i lc;i) {c[i] a[i] b[i];//需是 因为如果该位进行相加计算之前该位可能有进位存储c[i 1] c[i] / 10;c[i] % 10;}//去除c中的前导0确定lcwhile (!c[lc] lc 1) lc--;for (int i lc; i 1;i--) {cout c[i];}return 0;
}