您的位置:首页 > 运维架构

OpenJudge 2980 大整数乘法

2014-01-13 09:48 357 查看
链接地址:http://bailian.openjudge.cn/practice/2980/

题目:

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

样例输出
1219326311126352690000

来源程序设计实习2007

思路:

套大整数乘法模板即可

代码:

#include <iostream>
#include <string>
#include <vector>
#include <cstdio>
#include <algorithm>
using namespace std;

string mul(string str1,string str2)
{
vector<int> v_res(str1.size()+str2.size(),0);
string::size_type i,j;
vector<int>::size_type k,p;

reverse(str1.begin(),str1.end());
reverse(str2.begin(),str2.end());
for(i = 0; i != str1.size(); ++i)
{
for(j = 0; j != str2.size(); ++j)
{
v_res[i+j] += (str1[i]-'0') * (str2[j] - '0');
}
}
for(k = 0; k != v_res.size() - 1; ++k)
{
v_res[k+1] += v_res[k] / 10;
v_res[k] = v_res[k] % 10;
}

for(p = v_res.size() - 1; p != -1; --p)
{
if(v_res[p] != 0) break;
}
if(p == -1) p = 0;

string s_res(p+1,'0');
for(k = p; k != -1; --k) s_res[p-k] = char(v_res[k] + '0');

return s_res;

}

int main()
{
string str1,str2;
cin>>str1>>str2;
cout<<mul(str1,str2)<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: