2127:【例1.2】高精度加法 && 高精度计算

【题目描述】
求两个不超过100位的非负整数的和。

【输入】
有两行,每行是一个不超过100位的非负整数。

【输出】
一行,即相加后的结果。

【输入样例】
22222222222222222222
33333333333333333333
【输出样例】
55555555555555555555

#include<iostream>
 
using namespace std;
 
const int N =1e6 ;
int a[N],b[N],c[N];
int la,la1,la2;
 
int main()
{
	string s,p;
	cin >>s>>p;
	la = s.size();
    la1=p.size();
	//拆分每一位,逆序存放在数组
	for (int i = 0; i < la; i++)
	{
		a[la - 1 - i] = s[i] - '0';
	}
    for (int i = 0; i < la1; i++)
	{
		b[la1 - 1 - i] = p[i] - '0';
	}
    int jinwei=0,temp=0;//temp记录有多少位
    for(int i=0;i<max(la,la1)||jinwei>0;i++)
    {
        int sum=jinwei;//下一个循环sum有的进位的数与原本要加的数加。
        if(i<la) sum+=a[i];
        if(i<la1) sum+=b[i];//逐位相加
        c[temp++]=sum%10;//取两位数相加的余数,17%20==7;
        jinwei=sum/10;//取进位后的数,
    }
	for (int i=temp-1;i>=0;--i)
	{
		cout <<c[i];//再逆序输出
	}
	return 0;
}

高精度计算因为范围太大,要用string以字符形式存储,然后转为整数数组类型逐位相加,在string和int a【n】中由于数相加通常由个位到高位依次加和,由于使用的循环原因,要从0开始代表个位,原string中0位置为高位,查找规律发现,在string和逆序的a【】中分别用下标从0开始标记,得出相同数字下标加和-1为一个固定数,于是
for (int i = 0; i < la; i++) { a[la - 1 - i] = s[i] - '0';//减‘0’因为s为字符型。减i是为了移动,对应在数组中的下标位置就是ls(设置一个长度变量)减1再减i }
参考hauiz博主。

posted @ 2026-03-13 19:24  Szy二九no  阅读(8)  评论(0)    收藏  举报