谢谢!
#include <iostream>
using namespace std;
#define MAX 10000 //可以计算10000位
void num_read(int *a) //逆向读取数据 a[0]为低位
{
int len,i;
char temp[MAX];
scanf("%s",&temp);
len=strlen(temp);
for(i=len;i>=1;i--)
a[i]=temp[len-i]-'0';
a[0]=len;
}
void bigplus(int a[],int b[],int c[]) //大整数加法
{
int i,len;
len=(a[0]>b[0]?a[0]:b[0]);
for(i=0;i<=len+1;i++) //将数组清0
c[i]=0;
int len1=(a[0]<b[0]?a[0]:b[0]);
for (i=1;i<=len1;i++) //计算每一位的值
{
c[i]+=(a[i]+b[i]);
while (c[i]>=10)
{
c[i]-=10; //大于10的取个位
c[i+1]++; //高位加1
}
}
bool tag = a[0]>b[0];
for(i=len1+1;i<=len;i++)
{
if(tag)
c[i]=a[i];
else
c[i]=b[i];
while (c[i]>=10)
{
c[i]-=10; //大于10的取个位
c[i+1]++; //高位加1
}
}
if (c[i]>0)
len++;
c[0]=len; //c[0]保存结果数组实际长度
for (i=len;i>=1;i--)
{
printf("%d",c[i]);
}
printf("\n");
}
int main()
{
int a[MAX],b[MAX],c[MAX];
num_read(a);
num_read(b);
bigplus(a,b,c);
return 0;
}
ACM上经常遇到的一个函数
前几天刚写的一个, 刚学习
ACM写的不是很好
[此贴子已经被作者于2007-7-20 10:16:48编辑过]