题目链接:https://syzoj.com/problem/22
内存限制:128 MiB 时间限制:1000 ms
题目描述
输入a,b。输出a*b的结果
输入格式
一行两个数a,b
输出格式
一行一个整数,a*b的结果
样例输入
2 3
样例输出
6
数据范围与提示
a,b两数的位数不超过500位
保证输入的两数开头第一位不是0
解题思路
模拟乘法运算。
#include <bits/stdc++.h>
using namespace std;
char a[505], b[505];
int sa[505], sb[505], s[1005];
int main() {
int la, lb, lc, c;
while (~scanf("%s%s", a, b)) {
la = strlen(a);
lb = strlen(b);
memset(s, 0, sizeof(s));
for (int i = 0; i < la; i++)
sa[la - i - 1] = a[i] - '0';
for (int i = 0; i < lb; i++)
sb[lb - i - 1] = b[i] - '0';
for (int i = 0; i < la; i++)
for (int j = 0; j < lb; j++)
s[i + j] += sa[i] * sb[j];
lc = la + lb, c = 0;
for (int i = 0; i < lc; i++) {
s[i] += c;
c = s[i] / 10;
s[i] %= 10;
}
while (!s[lc] && lc > 0)
lc--;
for (lc; lc >= 0; lc--)
printf("%d", s[lc]);
printf("\n");
}
return 0;
}