1 #include<iostream> 2 3 #include<stdio.h> 4 5 #include<string.h> 6 7 #define Len 3000//大数的长度 8 9 using namespace std; 10 11 int Input (char n[])//将大数读入的函数 12 13 { 14 15 char s[Len]; 16 17 int i,l; 18 19 20 21 for(i=0; i<Len; i++) n[i]=0; 22 23 if(scanf("%s",s)<1) return -1; 24 25 l= strlen(s); 26 27 for(i=0; i<l; i++) //将输入的大数逆置 28 29 n[i]=s[l-i-1]-'0'; 30 31 32 33 } 34 35 int Print (char n[]) 36 37 { 38 39 int i; 40 41 for(i=Len-1; i>0; i--) 42 43 if(n[i]!=0) break; 44 45 for(; i>=0; i--) 46 47 printf("%d",n[i]); 48 49 printf(" "); 50 51 } 52 53 54 55 void Add (char a[],char b[],char c[])//大数加法 56 57 { 58 59 int i=0; 60 61 for(i=0; i<Len; i++) 62 63 c[i]=a[i]+b[i]; 64 65 for(i=0; i<Len; i++) //处理进位 66 67 { 68 69 if(c[i]>=10) 70 71 { 72 73 c[i+1]+=c[i]/10; 74 75 c[i]=c[i]%10; 76 77 } 78 79 } 80 81 } 82 83 void Mul(char a[],char b[],char c[])//大数乘法 84 85 { 86 87 int i,j; 88 89 int alen=strlen(a),blen=strlen(b); 90 91 for(i=0; i<Len; i++) c[i]=0; 92 93 for(i=0; i<alen; i++) 94 95 for(j=0; j<blen; j++) //处理进位 96 97 { 98 99 c[i+j]+=a[i]*b[j]; 100 101 if(c[i+j]>=10) 102 103 { 104 105 c[i+j+1]+=c[i+j]/10; 106 107 c[i+j]%=10; 108 109 } 110 111 } 112 113 } 114 115 int main() 116 117 { 118 119 char a[Len],b[Len],c[Len]; 120 121 Input(a); 122 123 Input(b); 124 125 Add(a,b,c); 126 127 Print(c); 128 129 Mul(a,b,c); 130 131 Print(c); 132 133 return 0; 134 135 }
这是最好理解的一种写法,不过好像用java写高精度会简单很多,等学了java之后再补充
还有个博客写得很多....但不好理解 http://www.cnblogs.com/heyonggang/p/3599857.html