码迷,mamicode.com
首页 > 其他好文 > 详细

大数相乘

时间:2015-08-20 12:29:12      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

大数相乘的实现,在这里,采用最直接的实现方法:类似于手工计算,逐位相乘。

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 //反转字符,使其符合数组低位为数字低位
 6 void reverseNum(char* s1)
 7 {
 8     int i=0;
 9     int j=strlen(s1)-1;
10     while(i<j)
11     {
12         char temp=s1[i];
13         s1[i]=s1[j];
14         s1[j]=temp;
15         ++i;
16         --j;
17     }
18 }
19 
20 //输入两个数字字符串,进行相乘,并返回结果字符串
21 char* BigNumMultiple(char* s1,char* s2)
22 {
23     //反转数字
24     reverseNum(s1);
25     reverseNum(s2);
26 
27     int temp1,temp2,addFlag,multiFlag;
28     int len1=strlen(s1);
29     int len2=strlen(s2);
30     temp1=temp2=0;
31 
32     char* result=new char[len1+len2+1];
33     memset(result,48,len1+len2);
34     result[len1+len2]=\0;
35 
36     //相乘
37     for(int i=0;i<=len1-1;i++)
38     {
39         multiFlag=0;
40         addFlag=0;
41         for(int j=0;j<=len2-1;j++)
42         {
43             temp1=(s1[i]-0)*(s2[j]-0)+multiFlag;
44             multiFlag=temp1/10;
45             temp1=temp1%10;
46             temp2=(result[i+j]-0)+temp1+addFlag;
47             result[i+j]=temp2%10+0;
48             addFlag=temp2/10;
49         }
50         result[i+len2]+=multiFlag+addFlag;
51     }
52 
53     //去除高位多余的0
54     int n=strlen(result)-1;
55     while(result[n]==0)
56     {
57         //确保结果为0的时候不会把最后一个0清空掉
58         if(n==0)
59             break;
60         result[n]=\0;
61         n--;
62     }
63     
64     //恢复数字的字符串显示
65     reverseNum(s1);
66     reverseNum(s2);
67     reverseNum(result);
68 
69     return result;
70 }
71 
72 //简单测试
73 int main()
74 {
75 while(true)
76 {
77     char* left=new char[100];
78     char* right=new char[100];
79     char* str;
80     cin.getline(left,100);
81     cin.getline(right,100);
82     str=BigNumMultiple(left,right);
83     cout<<left<<"*"<<right<<"=\n"<<str<<endl;
84     system("pause");
85 }
86 }

 

大数相乘

标签:

原文地址:http://www.cnblogs.com/lsr-flying/p/4741106.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!