#include <stdio.h>
#include <string.h>
#include <conio.h>
#define Max 1000
char res[Max+1]; // 和
char a[Max],b[Max]; // 两个加数!
int len1,len2;
void Init(char *a)
{
int i;
for(i=0; i<Max; i++)
{
a[i] = '0';
}
return ;
}
/*************************************************************
* Function: 大整数相加
* description: 两个大整数作加法运算,从后面往前面相加,附带进位.
为了满足任意位数的两个大整数相加,一开始把存放结果的
数初始化为'0',再在后面加上其中的一个加数.
* input : res--既是一个加数,又是存放相加结果.
newont-- 其中的一个加数
* output : 相加的结果。
* backworth : No Baceworth@!
**************************************************************/
void Long_Add(char *res,char *newone) // res数组里的数既是加数又是加出来的和.
{
int i,j;
int len;
int tempsum;
int carry = 0; // 进位
len = strlen(newone);
for(i=Max-1,j=len-1; i>=0,j>=0; i--,j--)
{
tempsum = res[i]-'0'+newone[j]-'0'+carry;
res[i] = tempsum%10+'0';
carry = tempsum/10;
}
while(carry > 0) // ------注意处理最后一个进位!
{
tempsum = res[i]-'0'+carry ;
res[i] = tempsum%10+'0';
carry = tempsum/10;
i--;
}
//------------------- 很绚的输出运算结果。
for(i=0;i<Max;i++)
if(res[i] != '0')
break;
int n=i;
len = Max - i;
for(i=0;i<10;i++)
putchar(' ');
puts(a);
for(i=0;i<3;i++)
putchar(' ');
putchar('+');
for(i=0;i<6+len1-len2;i++)
putchar(' ');
puts(b);
for(i=0;i<3;i++)
putchar(' ');
for(i=0;i<len+7;i++)
putchar('-');
printf("/n");
for(i=0;i<10+len1-len;i++)
putchar(' ');
for(n;n<Max;n++)
putchar(res[n]);
//--------------------------以上是为了绚烂输出结果的 !
/* for(i;i<Max;i++)
putchar(res[i]);
printf("/n");
*/
return ;
}
void Input(char *a,char *b)
{
int i,len;
printf("请输入两个大整数:/n");
scanf("%s %s",a,b);
len1=strlen(a);
len2=strlen(b);
Init(res);
len=strlen(a);
for(i=len-1; i>=0; i--)
res[Max+i-len] = a[i];
}
int main()
{
Input(a,b);
Long_Add(res,b);
getch();
return 0;
}
/**************************88运算结果:
请输入两个大整数:
25639874569 5124562132215
25639874569
+ 5124562132215
--------------------
5150202006784
请输入两个大整数:
1999999 3
1999999
+ 3
--------------
2000002
******************************************/