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 }

 

你可能感兴趣的:(open)