算法学习【4】 - 1381. a*b

来源:互联网 发布:windows错误报告 很大 编辑:程序博客网 时间:2024/06/05 02:32

题目:http://soj.me/1381

1381. a*b

Description

Give two positive integers a and b, please help us calculate a*b.

Input

The first line of the input is a positive integer T. T is the number of test cases followed.

Each test case contain two integer a,b (0<=a<=10^100, 0<=b<=10,000) given in one line.

Output

The output of each test case should consist of one line, contain the result of a*b.

Sample Input

12 7

Sample Output

14

Problem Source

Algorithm Course Examination 2006



思路:大整数乘法,稍微修改了下,把b当成int叠加吧,感觉这种方法比较简单。

代码:

#include <iostream>#include <string>using namespace std;string BigAdd(string a, string b){while (a.size() < b.size()){a = '0' + a;}while (a.size() > b.size()){b = '0' + b;}a = '0' + a;b = '0' + b;for (int i = a.size() - 1; i > 0; i--){a[i] = a[i] + b[i] - '0';if (a[i] > '9'){a[i] = a[i] - 10;a[i - 1] = a[i - 1] + 1;}}int zeroNum = 0;for (int j = 0; j < a.size(); j++){if (a[j] == '0'){zeroNum++;} else{break;}}if (zeroNum == a.size()){a = '0';} else{a = a.substr(zeroNum, a.size() - zeroNum);}return a;}string specialMul(string a, int b){string sum = "0";for (int i = 0; i < b; i++){sum = BigAdd(sum, a);}return sum;}int main(){int size;string a;int b;cin >> size;while (size--){cin >> a >> b;cout << specialMul(a, b) << endl;}return 0;}


原创粉丝点击