【转载】大整数乘法计算

 

普通的计算器只能计算16位数字,如附件中自带的计算器

截图:

【转载】大整数乘法计算_第1张图片

 

自己写的计算程序

【转载】大整数乘法计算_第2张图片

 

View Code
  1 #include
2 #include
3 #include
4 using namespace std;
5 int gn=0;//global variable that represents the size
6
7
8
9 int* multi(int* num1, int size1 ,int* num2, int size2)
10 {
11 int size=size1+size2;
12 gn=size-1;
13 int* ret=new int[size+1];
14 memset(ret,0,sizeof(int)*size);
15 int i=0,j=0,k;
16
17 /*----------------------------核心算法-----------------------------*/
18 for(i=0;i 19 {
20 k=i;
21 for(j=0;j 22 {
23
24 ret[k++]+=num1[i]*num2[j];
25 }
26 }
27 /*-------------------------------------------------------------------*/
28
29 /*--------------------------判断是否进位-----------------------------*/
30 for (j=size-1;j>0;--j)
31 {
32 if (ret[j]>=10)
33 {
34 ret[j-1]+=ret[j]/10;
35 ret[j]%=10;
36 }
37 }
38
39 /*-------单独判断ret[0]----------*/
40 if (ret[0]>=10)
41 {
42 for (i=size;i>0;--i)
43 ret[i]=ret[i-1];
44 ret[0]=ret[1]/10;
45 ret[1]%=10;
46 gn=size;
47
48
49 }
50 /*----------------------------------------------------------------------*/
51 return ret;
52
53
54
55 }
56
57 void main()
58 {
59 cout<<"by tiredoy"< 60 <<"-------------------------------"< 61 int pa[2000],pb[2000];
62 int a=0,b=0,n=0;
63 char ch=getch();
64 /*------------------------------------宁肯麻烦,也不要goto--------------------------------------*/
65 int flag=1;
66 while(flag)
67 {
68 while(ch!=42)
69 {
70 while ( ch>=48&&ch<=57 )
71 {
72 pa[a]=ch-48;
73 cout< 74 ++a;
75 break;
76 }
77 ch=getch();
78 }
79 if (a!=0)
80 {
81 flag=0;
82
83 }
84 else {
85 ch=getch();
86 }
87 continue;
88
89 }
90 flag=1;
91 cout<"*"< 92 while(flag)
93 {
94 while(!(ch==13||ch==61))
95 {
96 while ( ch>=48&&ch<=57 )
97 {
98 pb[b]=ch-48;
99 cout<100 ++b;
101 break;
102 }
103 ch=getch();
104 }
105 if (b!=0)
106 {
107 flag=0;
108
109 }
110 else {
111 ch=getch();
112 }
113 continue;
114
115 }
116
117 int* ret=multi(pa,a,pb,b);
118
119 cout<"="<120 for(int i=0;i121 cout<122 cout<123
124
125
126
127
128
129 }

 

你可能感兴趣的:(【转载】大整数乘法计算)