1.原理:
用数组模拟加法
2.难点:
1.进位问题
2.去除首位的0
3.代码:
1.核心代码
c[i]+=a[i]+b[i];
c[i+1]=c[i]/10;
c[i]=c[i]%10;
2.函数
void add(char a1[],char b1[]){
int a[1001]={}; //加数
int b[1001]={}; //被加数
int c[1001]={}; //和
int lena=strlen(a1),lenb=strlen(b1); //长度
int lenmax=max(lena,lenb)+1;
for(int i=0;i<lena;i++){
a[lena-i-1]=(a1[i]-'0'); //翻转
}
for(int i=0;i<lenb;i++){
b[lenb-i-1]=(b1[i]-'0'); //翻转
}
for(int i=0;i<lenmax;i++){ //进行高加
c[i]+=(a[i]+b[i]);
c[i+1]=c[i]/10;
c[i]=c[i]%10;
}
//除去首位0
while(true){
if(c[lenmax]==0 &&lenmax>0) lenmax--;
else break;
}
//输出
for(int i=lenmax;i>=0;i--){
cout<<c[i];
}
}
3.题目
题目描述:
给定一个高精度数a和b,输出它们的合
样例一:
输入:114514
2333333333
输出:2333447847
样例二
输入:9999999999999
888888888
输出:10000888888887
4.答案
#include<iostream>
#include<cstring>
using namespace std;
void add(char a1[],char b1[]){
int a[1001]={}; //加数
int b[1001]={}; //被加数
int c[1001]={}; //和
int lena=strlen(a1),lenb=strlen(b1); //长度
int lenmax=max(lena,lenb)+1;
for(int i=0;i<lena;i++){
a[lena-i-1]=(a1[i]-'0'); //翻转
}
for(int i=0;i<lenb;i++){
b[lenb-i-1]=(b1[i]-'0'); //翻转
}
for(int i=0;i<lenmax;i++){ //进行高加
c[i]+=(a[i]+b[i]);
c[i+1]=c[i]/10;
c[i]=c[i]%10;
}
//除去首位0
while(true){
if(c[lenmax]==0 &&lenmax>0) lenmax--;
else break;
}
//输出
for(int i=lenmax;i>=0;i--){
cout<<c[i];
}
}
int main(){
char a[1001]={},b[1001]={};
cin>>a>>b;
add(a,b);
return 0;
}