编程练习11

大数相乘

 1 //大数相乘
 2 #include <iostream>
 3 using namespace std;
 4 
 5 void invert(char str1[],char str2[])
 6 {  //-------------------------------------------
 7    //这前面都是初始化操作,没什么东西
 8     int len1=strlen(str1),len2=strlen(str2);
 9     int* num1=(int*)malloc(sizeof(int)*len1);
10     int* num2=(int*)malloc(sizeof(int)*len2);
11     int len=len1+len2;
12     int* sum=(int*)malloc(sizeof(int)*len);
13 
14     for(int i=0;i<len1;++i)
15         num1[i]=str1[i]-'0';
16     for(int j=0;j<len2;++j)
17         num2[j]=str2[j]-'0';
18     for(i=0;i<len1+len2;++i)
19         sum[i]=0;
20     //--------------------------------------------
21     //按位相乘
22     for(i=0;i<len1;++i)
23         for(j=0;j<len2;++j)
24             sum[i+j+1]+=num1[i]*num2[j];
25     //移位操作
26     for(i=len-1;i>0;--i)
27     {
28         if(sum[i]>=10)
29         {
30             sum[i-1]+=sum[i]/10;
31             sum[i]%=10;
32         }
33     }
34 
35     if(sum[0]!=0) cout<<sum[0];
36     for(i=1;i<len;++i)
37         cout<<sum[i];
38 
39 }
40 
41 int main()
42 {
43     char str1[100]={0},str2[100]={0};
44     cin>>str1>>str2;
45     invert(str1,str2);
46 
47     cout<<endl;
48     return 0;
49 }

华为啊,悲剧,考之前听大成讲时原以为很高深,懂的原理后,so easy!
所以机会总是留给有准备的人,华为进不去了哦,卧槽,我怎么总是这是二啊,信息有时很重要啊!

posted on 2012-09-13 09:30  lyncre  阅读(152)  评论(0)    收藏  举报

导航