关闭

sicily 1381. a*b

370人阅读 评论(0) 收藏 举报
分类:

1381. a*b

Constraints

Time Limit: 1 secs, Memory Limit: 32 MB

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

题目分析

理同1201
先反转字符串,
思考如何变成字符串与个位数的乘法
注意前缀零和结果为零


#include <iostream>
#include <memory.h>

int ans[106];

std::string reverse(std::string s) {
  std::string sss = "";
  for (int i = s.length()-1; i >= 0; --i)
    sss += s[i];
  return sss;
}

void add(std::string s, int times) {
  for (int i = 0; i < s.length(); ++i) {
    ans[i] += (s[i]-'0') * times;
    if (ans[i] > 9) {
      ans[i+1] += ans[i] / 10;
      ans[i] %= 10;
    }
  }
}

int main()
{
  int num;
  std::cin >> num;
  while (num--) {
    memset(ans, 0, sizeof(ans));
    std::string s;
    int times;
    std::cin >> s >> times;
    s = reverse(s);
    while (times != 0) {
      int temp = times % 10;
      add(s, temp);
      s = "0" + s;
      times = (times - temp) / 10;
    }
    bool pre = true;
    for (int i = 105; i >= 0; --i) {
      if (pre && ans[i] == 0)
        continue;
      pre = false;
      std::cout << ans[i];
    }
    if (pre) std::cout << "0";
    std::cout << std::endl;
  }
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:26203次
    • 积分:1263
    • 等级:
    • 排名:千里之外
    • 原创:104篇
    • 转载:0篇
    • 译文:1篇
    • 评论:3条
    文章分类
    最新评论