链接地址: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 }