题目链接: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;
}