因为1000位以内的数字相加,所以无法直接定义变量求和,故采用字符串数组存储的方式,然后将字符数字转化成整型数字再按位相加,处理进位情况,如果两个数位数不一致,要单独处理。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<ctype.h>
int main(){
//字符数字转化成整型数字
char a[1005];
char b[1005];
gets(a);
gets(b);
int flag=0;//进位标志
int i,j,k;
int sum[1005];//保存相加的结果
k=-1;//数组下标标记变量
for( i=strlen(a)-1,j=strlen(b)-1;i>=0&&j>=0;){
int s1=a[i]-'0';//字符数字转化成整型数字
int s2=b[j]-'0';
int s3=s1+s2+flag;
if(s3>10){//有进位
sum[++k]=s3%10;
flag=1;
}else if(s3==10){//有进位
sum[++k]=0;
flag=1;
}else{
sum[++k]=s3;
flag=0;
}
i--;
j--;
}
//处理两个数位数不一致的情况 ,注意两者都为零或只有一个为零
if(i==0&&j!=0){
//处理最头段进位情况
if(flag==1){
sum[++k]=b[j]-'0'+1;
}else{
sum[++k]=b[j]-'0';
}
for(int t=j-1;t>=0;t--){
sum[++k]=b[t]-'0';
}
}else if(j==0&&i!=0){
if(flag==1){
sum[++k]=a[i]-'0'+1;
}else{
sum[++k]=a[i]-'0';
}
for(int t=i-1;t>=0;t--){
sum[++k]=a[t]-'0';
}
}else if(i==0&&j==0){
if(flag==1){
sum[++k]=flag;
}
}
//将数组倒序打印即为结果
for(int t=k;t>=0;t--){
printf("%d",sum[t]);
}
return 0;
}