思路分析:这是杭电上的一道典型的高精度加法运算,以现有的整型数据类型不足以计算如此大的数,不然会导致溢出。
此题的核心算法是加法运算。
1.先将在屏幕上输入的两个数分别用字符数组(字符串)储存起来
2.然后将这两个数每一位进行对位,长度少的在高位补零,直至相等;为防止最高位有进位,在这两个数的最高位之前再补一个零
3.之后就是将这两个数按位相加,注意进位
4.如果最高位为零则清零
#include<iostream>
#include<string>
using namespace std;
string clear(string a){//清零函数
if(a.empty()) a="0";
while(a[0]=='0') a.erase(0,1);
if(a.empty()) a="0";
return a;
}
string add(string a,string b){//加法函数
int i=0,tmp,str=0;
while(a.length()!=b.length())
a.length()<b.length() ? a='0'+a:b='0'+b;
a='0'+a;
b='0'+b;//对位
i=a.length();
while(i--){//逐位相加
tmp=a[i]-'0'+b[i]-'0'+str;//str用来代表tmp是否大于10,是则进位
str=tmp/10;
a[i]=char(tmp%10+'0');用ascll码转成数字字符
}
a&