谢谢!
就是满10进1,用循环一位一位的加。
当然,可可以分割下数组,每几位相加进位(注意越界)。
 
										
					
	#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编辑过]