#include "stdafx.h"
//#include <malloc.h>
#define N 200 //预定一个比较长的长度值
int slen(char a[]) //计算加数的长度
{
int i=0;
for(;;i++)
{
if(a[i]=='/0') return i;
}
}
int tonum(char a) //字符转数字
{
return (a-48);
}
//
int _tmain(int argc, _TCHAR* argv[])
{
//int len,i,up=0; //
//printf("请输入两个加数最大数的位数:"); // //
//scanf("%d",&len); // 第一次尝试 //
分配内存 // 但没有成功 //
//char *add1,*add2,*and; // 后来发现是个简单的问题 //
//add1=(char *)malloc(len*sizeof(char)); // //
//add2=(char *)malloc(len*sizeof(char)); // //
//and=(char *)malloc((len+1)*sizeof(char)); // //
//scanf("%s%s",add1,add2); // //
//i=len; // //
//for(i=len;i>=0;i--) // //
//{ // //
// and[i]=(add1[i]+add2[i]-96)%10+48+up; // //
// if((add1[i]+add2[i]-96)/10==1) up=1; // //
// else up=0; // //
//} // //
//printf("%s",and); //
/
for(;;){
char ad1[N]={},ad2[N]={},sum[N+1]={}; //定义两个字符长数组,ad1和ad2分别是两加数,sum是结果
scanf("%s%s",ad1,ad2); //输入两个加数
int i=slen(ad1),j=slen(ad2); //分别算出两个加数的长度
int n=((i>j)?i:j)+1,up=0; //用n来代表结果的长度(比最长的加数多一位)
int len=n; //用于限制后面结果输出的范围
for (--n,--i,--j;i>=0 && j>=0;n--,i--,j--) //把加数每个字符相加的结果存到sum对应的位置
{
sum[n]=(tonum(ad1[i])+tonum(ad2[j]))%10+48+up;
if((tonum(ad1[i])+tonum(ad2[j]))/10==1) up=1; //判断是否进位
else up=0;
if(sum[n]==58) //判断是否刚好为0(因为ASCII中'0'是在'1'前,其ASCII值为58)
{
sum[n]='0';
up=1;
}
}
if (i==j) //如果i==j则说明以上的运算已经把除了sum[0]之外其它位的值确定好
{
if (up==1) //处理当i==j时sum[0]的值
sum[0]='1';
else sum[0]='0';
}
else //如果i!=j则要对长数和sum对应位进行处理
{
if(i>=0) //处理当ad1的长度比ad2长的情况
{
for(;i>=0;i--,n--)
{
sum[n]=ad1[i]+up;
if(sum[n]==58) //处理进位
{
sum[n]='0';
up=1;
}
else up=0;
}
}
if(j>=0) //处理当ad2的长度比ad1长的情况
{
for(;j>=0;j--,n--)
{
sum[n]=ad2[j]+up;
if(sum[n]==58) //处理进位
{
sum[n]='0';
up=1;
}
else up=0;
}
}
if(up==1) sum[0]='1'; //处理当i!=j时sum[0]的值
else sum[0]='0';
}
if(sum[0]=='0') i=1; //确定sum第一位是不是'0',如果是的话就不输出这个位
else i=0;
for(;i<len;i++) //进行输出
printf("%c",sum[i]);
}
}