Gym - 101972A
Multiplication Dilemma
题目大意
两个数相乘,用分配律把两个数相乘进行化简运算
要求每两个数相乘,每个数有且只有一位非0Time : 1000 ms
Memory: 262144 kB
解题思路及分析
把每个数按十进制位拆开,将该位数及后面的0存储到数组里面(若该位为0则跳过),再将两个数组中的数两两相乘再相加即可
AC代码
#include <bits/stdc++.h>
typedef long long llong;
typedef long double ldouble;
using namespace std;
int a, b;
int v1[20], v2[20];
int cnt1, cnt2;
int main() {
#ifdef LOCAL
freopen("in.in", "r", stdin);
freopen("out.out", "w", stdout);
#endif
int T; cin >> T;
while (T--) {
cnt1 = cnt2 = 0;
cin >> a >> b;
for (llong p = 1; p < (int)1e9 + 10; p *= 10) {
if (a / p == 0) {
break;
}
if (a % (p * 10) != 0) {
v1[cnt1++] = a % (p * 10);
a -= a % (p * 10);
}
}
for (llong p = 1; p < (int)1e9 + 10; p *= 10) {
if (b / p == 0) {
break;
}
if (b % (p * 10) != 0) {
v2[cnt2++] = b % (p * 10);
b -= b % (p * 10);
}
}
bool first = true;
for (int i = 0; i < cnt1; i++) {
for (int j = 0; j < cnt2; j++) {
if (first) first = false;
else printf(" + ");
printf("%d x %d", v1[i], v2[j]);
}
}
printf("\n");
}
return 0;
}