高精度加法,相当于a+b problem,不用考虑负数.
输入格式
分两行输入。a,b
输出格式
输出只有一行,代表a+b 的值
思路记录:模拟的入门级题目
输入两字符串,先把位数对其,在较小的字符串前补零,再转为整形字符数组,在尾部开始循环,
把结果压入栈中,循环结束后判断pre是否为零,不为零则需压入栈中,再把栈元素输出即为结果
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <iostream>
#include <stack>
using namespace std;
string str1,str2;
stack<int> s;
int a[10005],b[10005];
int main()
{
cin>>str1>>str2;
int lena,lenb,i=0,s[10005]={0},p=0;
lena=str1.length();
lenb=str2.length();
if(lena>lenb){
for( i=0;i<lena-lenb;i++){//a比较长
str2='0'+str2;
//cout<<str2;
}
}else if(lena<lenb){//b比较长
for(i=0;i<lenb-lena;i++)
str1='0'+str1;
//cout<<str1;
}
int j=str1.length();
for( i=0;i<j;i++){
a[i]=str1[i]-'0';
b[i]=str2[i]-'0';
}
/*for(int i=0;i<j;i++){
cout<<a[i];
}*/
int pre=0;
for(i=j-1;i>=0;i--){
s[p++]=(a[i]+b[i]+pre)%10;
pre=(a[i]+b[i]+pre)/10;
}
if(pre!=0){
s[p++]=pre;
}
while(p){
cout<<s[p-1];
p--;
}
return 0;
}