大数加法、乘法

  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("\n");
 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

posted on 2014-08-04 19:46  薛定谔的熊猫  阅读(165)  评论(0编辑  收藏  举报

导航