- 阮迪 的博客
学习乘法
- @ 2024-10-5 8:40:16
错误原因
因为思路错误
思路
因为交换两个数字的数位它们的和不会改变,而当它们的差越来越小时,乘积会越来越大。
#include<bits/stdc++.h>
using namespace std;
string a, b;
long long x, y;
bool vis[100005];
bool cmp (string a, string b) {
return a > b;
}
int f(string a, string b) {
int idx = 0;
int len = a.size();
for (int i = 0; i < len; i++) {
if (a[i] != b[i]) return i+1;
}
}
int main(){
freopen("mul.in", "r", stdin);
freopen("mul.out", "w", stdout);
cin >> a >> b;
int len = a.size();
if (!cmp(a, b)) swap(a, b);
int idx = f(a, b);
for (int i = idx; i < len; i++) {
if (a[i] > b[i]) swap(a[i], b[i]);
}
for (int i = 0; i < len; i++) {
x = x * 10 + a[i] - '0';
y = y * 10 + b[i] - '0';
}
cout << x * y;
return 0;
}