OpenJudge 2980 大整数乘法

链接地址:http://bailian.openjudge.cn/practice/2980/

题目:

总时间限制:
1000ms
内存限制:
65536kB
描述
求两个不超过200位的非负整数的积。
输入
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
输出
一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
12345678900
98765432100
样例输出
1219326311126352690000
来源
程序设计实习2007

思路:

套大整数乘法模板即可

代码:

 1 #include <iostream>
 2 #include <string>
 3 #include <vector>
 4 #include <cstdio>
 5 #include <algorithm>
 6 using namespace std;
 7 
 8 string mul(string str1,string str2)
 9 {
10     vector<int> v_res(str1.size()+str2.size(),0);
11     string::size_type i,j;
12     vector<int>::size_type k,p;
13 
14     reverse(str1.begin(),str1.end());
15     reverse(str2.begin(),str2.end());
16     for(i = 0; i != str1.size(); ++i)
17     {
18         for(j = 0; j != str2.size(); ++j)
19         {
20             v_res[i+j] += (str1[i]-'0') * (str2[j] - '0');
21         }
22     }
23     for(k = 0; k != v_res.size() - 1; ++k)
24     {
25         v_res[k+1] += v_res[k] / 10;
26         v_res[k] = v_res[k] % 10;
27     }
28 
29     for(p = v_res.size() - 1; p != -1; --p)
30     {
31         if(v_res[p] != 0) break;
32     }
33     if(p == -1) p = 0;
34 
35     string s_res(p+1,'0');
36     for(k = p; k != -1; --k) s_res[p-k] = char(v_res[k] + '0');
37     
38 
39     return s_res;
40 
41 }
42 
43 
44 int main()
45 {
46     string str1,str2;
47     cin>>str1>>str2;
48     cout<<mul(str1,str2)<<endl;
49     return 0;
50 }
原文地址:https://www.cnblogs.com/mobileliker/p/3516915.html