#include<iostream> #include<stdio.h> #include<string.h> #define Len 3000//大数的长度 using namespace std; int Input (char n[])//将大数读入的函数 { char s[Len]; int i,l; for(i=0; i<Len; i++) n[i]=0; if(scanf("%s",s)<1) return -1; l= strlen(s); for(i=0; i<l; i++) //将输入的大数逆置 n[i]=s[l-i-1]-'0'; } int Print (char n[]) { int i; for(i=Len-1; i>0; i--) if(n[i]!=0) break; for(; i>=0; i--) printf("%d",n[i]); printf("\n"); } void Add (char a[],char b[],char c[])//大数加法 { int i=0; for(i=0; i<Len; i++) c[i]=a[i]+b[i]; for(i=0; i<Len; i++) //处理进位 { if(c[i]>=10) { c[i+1]+=c[i]/10; c[i]=c[i]%10; } } } void Mul(char a[],char b[],char c[])//大数乘法 { int i,j; int alen=strlen(a),blen=strlen(b); for(i=0; i<Len; i++) c[i]=0; for(i=0; i<alen; i++) for(j=0; j<blen; j++) //处理进位 { c[i+j]+=a[i]*b[j]; if(c[i+j]>=10) { c[i+j+1]+=c[i+j]/10; c[i+j]%=10; } } } int main() { char a[Len],b[Len],c[Len]; Input(a); Input(b); Add(a,b,c); Print(c); Mul(a,b,c); Print(c); return 0; }
http://blog.sina.com.cn/s/blog_4da7d7a70100d6t6.html
http://www.cnblogs.com/hicjiajia/archive/2010/09/26/1836337.html