无论是int还是long型,存储都有范围,所以说在大数字相加时,就不能简单的使用+号来加,需要存储在字符串中来实现。先来看原题吧:
OJ原题描述
解题思路:
1.使用字符数组存储大数字(之所以使用char数组,是因为输入数字时不需要打空格,就能识别一个占位,如果使用int数组,需要打空格才能占一个位)
2.字符数组转化为int数组
3.讨论大小进行分类讨论(特别是等于时的进位讨论,需要把第一位空出来)
4.进位关键点(当进位时,前一位+一,当前位取余)
代码
#include<iostream>
#include<string.h>
using namespace std;
void add(char a[],char b[]){
int length1,length2;
length1=strlen(a);
length2=strlen(b);
int A[length1+1],B[length2+1];
for(int i=1;i<=length1+1;i++)
A[i]=a[i-1]-'0';//注意错位
for(int i=1;i<=length2+1;i++)
B[i]=b[i-1]-'0';//转化为数字
if(length1>length2){
for(int i=length1,j=length2;j>=1;j--,i--){
A[i]+=B[j];
if(A[i]>=10){
A[i]%=10;
A[i-1]+=1;
}
}
for(int i=1;i<=length1;i++)
cout<<A[i];
}
else if(length1<length2){
for(int i=length1,j=length2;i>=1;j--,i--){
B[j]+=A[i];
if(B[j]>=10){
B[j]%=10;
B[j-1]+=1;
}
}
for(int i=1;i<=length2;i++)
cout<<B[i];
}
else {
for(int i=length1,j=length2;i>=1;j--,i--){
B[j]+=A[i];
if(B[j]>=10){
B[j]%=10;
B[j-1]+=1;
}
}
if(B[0]==1){
for(int i=0;i<=length1;i++)
cout<<B[i];
}
else
for(int i=1;i<=length1;i++)
cout<<B[i];
}
}
int main(){
char a[100],b[100];
cin>>a;
cin>>b;
add(a,b);
return 0;
}