本文共 1449 字,大约阅读时间需要 4 分钟。
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