高精度正整数加法

目录

输入格式

输出格式

输入数据 1

输出数据 1

为什么要用高精度

正片开始

全篇代码


输入格式

两行每行一个正整数,不超过100位。

输出格式

一个正整数,表示这两个数字的和。

输入数据 1

9999999
999999999

输出数据 1

1009999998

又是简单的高精度,大家可以多做高精度,锻炼模拟思想

学习之前你需要掌握:for循环,while循环,数组,字符串

为什么要用高精度

因为数字太大了,超出了long long和int的范围,所以数字只能用string(字符串)来代替,运算过程只能自己写,但是不要担心,高精度只不过是模拟,几乎没有算法!

正片开始

首先我们需要将字符串输入并求出它的长度

    cin>>s1>>s2;
	la=s1.size(),lb=s2.size();

随后将字符串转入数组

	for(i=0;i<la;i++) a[la-i-1]=s1[i]-'0';
	for(i=0;i<lb;i++) b[lb-i-1]=s2[i]-'0';

有点感觉了吗,我们正式开始“加”了!

思想:lc表示c数组的长度,a数组的第lc位加b数组的lc位在加上进位,得到c数组的第lc位

	lc=0;
	while(lc<la||lc<lb){
		c[lc]=a[lc]+b[lc]+j;
		j=c[lc]/10;
		c[lc]%=10;
		lc++;
	}

因为我们知道了c数组的长度,可以不去“0”,但是需要一个特判

	c[lc]=j;
	if(c[lc]==0) lc--;

输出,完成!

	for(i=lc;i>=0;i--)
		cout<<c[i];

全篇代码

//(water problem)
#include<bits/stdc++.h>
using namespace std;
const int mx=1010;
int a[mx],b[mx],c[mx];
int la,lb,lc,i,j;
int main()
{
	string s1,s2;
	cin>>s1>>s2;
	la=s1.size(),lb=s2.size();
	for(i=0;i<la;i++) a[la-i-1]=s1[i]-'0';
	for(i=0;i<lb;i++) b[lb-i-1]=s2[i]-'0';
	lc=0;
	while(lc<la||lc<lb){
		c[lc]=a[lc]+b[lc]+j;
		j=c[lc]/10;
		c[lc]%=10;
		lc++;
	}
	c[lc]=j;
	if(c[lc]==0) lc--;
	for(i=lc;i>=0;i--)
		cout<<c[i];
    return 0;
}

谢谢观看

posted @ 2022-09-17 16:58  Euouae  阅读(32)  评论(0编辑  收藏  举报