//思路是把两个大整数当作字符串来输入,再通过数组进行字符到整型的转换,为了方便计算,在字符整型转换的过程中,可将数倒换位置,让最小的(也就是个位数)在前面,方便进位
#include<stdio.h>
#include<string.h> //需要用到strlen来获得字符串长度
#define N 200 //定义N来设置数组长度
int main()
{
int i,k=0; //i用来循环,k用来记录相加后的有效数组长度
char ch1[N],ch2[N],tran_num[N]; //ch1,ch2用来接收输入数据,tran_num用来储存最终数据
int num1[N],num2[N],temp_num[N]={0}; //num1,num2是用来转换的两个整型数组,temp_num用来放相加完后的数,为了计算,先用零清空
gets(ch1);
gets(ch2);
for(i=0;i<strlen(ch1);i++) //字符转换为整型,并掉换位置
{
num1[i]=ch1[strlen(ch1)-1-i]-‘0‘;
num2[i]=ch2[strlen(ch2)-1-i]-‘0‘;
}
for(i=0;i<strlen(ch1);i++) //两数相加
{
if((temp_num[i]+num1[i]+num2[i])>=10) //判断i位置三个数相加是否大于等于10,如果是,则进1,其i位减10(要注意因为前面可能有进1,所以要判断三个数而不能只判断两个)
{
temp_num[i]+=num1[i]+num2[i]-10;
temp_num[i+1]+=1;
}
else
{
temp_num[i]+=num1[i]+num2[i];
}
k++;
if(i==(strlen(ch1)-1)&&(num1[strlen(ch1)-1]+num2[strlen(ch2)-1]>=10)) //判断进行最后一次相加时是否进位了,如果进位,k加多一次
{
k++;
}
}
for(i=0;i<k;i++) //转换回字符数组
{
tran_num[i]=temp_num[k-i-1]+‘0‘;
}
puts(tran_num);
return 0;
}
Wrong Answer好多次,一点点改,一点点改,这个版本目前只能用来计算相同长度的两个整数,后续改进ing......
//1.0版本,支持两个不等长的整数相加,更新的一个判断和一个计算时候的条件,其他基本一样
#include<stdio.h>
#include<string.h>
#define N 200
int main()
{
int i,k=0;
char ch1[N],ch2[N],tran_num[N],temp[N]; //新出现的temp用来做交换字符数组的中间数组
int num1[N],num2[N],temp_num[N]={0};
gets(ch1);
gets(ch2);
if(strlen(ch2)>strlen(ch1)) //把长的数放在ch1中
{
strcpy(temp,ch1);
strcpy(ch1,ch2);
strcpy(ch2,temp);
}
for(i=0;i<strlen(ch1);i++)
{
num1[i]=ch1[strlen(ch1)-1-i]-‘0‘;
num2[i]=ch2[strlen(ch2)-1-i]-‘0‘;
}
if(strlen(ch1)>strlen(ch2)) //多了这个判断,如果是不等长数组,进行新的算法,等长照旧
{
for(i=0;i<strlen(ch1);i++)
{
if(i>(strlen(ch2)-1)) //判断ch2是否已经相加完,如果相加完,后面只需要把ch1中多出的数放入temp_num的相应位置
{
temp_num[i]+=num1[i];
k++;
}
else
{
if((temp_num[i]+num1[i]+num2[i])>=10)
{
temp_num[i]+=num1[i]+num2[i]-10;
temp_num[i+1]+=1;
}
else
{
temp_num[i]+=num1[i]+num2[i];
}
k++;
}
}
}
else
{
for(i=0;i<strlen(ch1);i++)
{
if((temp_num[i]+num1[i]+num2[i])>=10)
{
temp_num[i]+=num1[i]+num2[i]-10;
temp_num[i+1]+=1;
}
else
{
temp_num[i]+=num1[i]+num2[i];
}
k++;
if(i==(strlen(ch1)-1)&&(num1[strlen(ch1)-1]+num2[strlen(ch2)-1]>=10))
{
k++;
}
}
}
for(i=0;i<k;i++)
{
tran_num[i]=temp_num[k-i-1]+‘0‘;
}
puts(tran_num);
return 0;
}