2016年腾讯实习在线笔试题目:大整数乘法
输入数据有两行,分别是两个非负整数,最多1000位,输出它们的乘积。
示例:
输入:
213897129837128937123
43502789523572345
输出:
9305121819000846375051201723846663435
/*************************************************************************
> File Name: string_big_num.cpp
> Author:
> Mail:
> Created Time: 2016年03月25日 星期五 22时32分13秒
************************************************************************/
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int result[2048] = {0};
int main()
{
string num1;
string num2;
cin >> num1;
cin >> num2;
int n = 0;
int val;
reverse(num1.begin(), num1.end());
reverse(num2.begin(), num2.end());
for(int i = 0; i < num1.size(); ++i){
int add_flag = 0;
int muliti_flag = 0;
for(int j = 0; j < num2.size(); ++j){
val = (num1[i]-48) * (num2[j]-48) + muliti_flag;
muliti_flag = val / 10;
val = val % 10;
int temp = result[i+j] + val + add_flag;
add_flag = temp / 10;
result[i+j] = temp % 10;
}
result[i+num2.size()] += muliti_flag + add_flag;
}
//下面是将结果反转
int first = 0;
int last = num1.size() + num2.size() - 2;
int num = 0;
while(first < last){
num = result[first];
result[first] = result[last];
result[last] = num;
first++;
last--;
}
//输出result中的内容
for(int i = 0; i < num1.size() + num2.size() - 1; ++i)
cout << result[i];
cout << endl;
return 0;
}
测试结果:
————————————————
版权声明:本文为CSDN博主「readyao」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Linux_ever/article/details/50988523