题目描述
程小盟上小学一年级了,现在他开始学习乘法。经过老师的悉心教导, 程小盟已经能够算出 a, b两个数字的乘积了。结果老师发现, 程小盟是偷偷拿到了老师的练习题答案,背下答案之后才 说对了乘积!
老师非常愤怒,决定给程小盟出更多的乘法题目,现在老师打算对 a,b这两个数字的数位进 行交换,这样就可以构造出新的数字来考程小盟乘法了。
例如原来的两个数字 a, b是 1234 和 5678,那么他可以交换两个数字的千位,使得两个 数字变成 5234 和 1678,然后再计算它们的乘积。
老师只会交换相同位置的数位,例如交换两个数字的千位,或者交换两个数字的百位,但是 不能交换一个数字的千位和另一个数字的百位(例如交换出 6234 和 5178 是不被允许的)。 老师可以进行无限次交换操作最终得到新的数字 a1, b,请问新的两个数字的乘积最大是多少。
输入格式
输入仅包含两个正整数a, b2T,保证两个数字的位数相同。
输出格式
输出一行一个整数表示答案。
样例输入content_copy
172 383
样例输出content_copy
68076
提示/说明
交换百位,得到 372 和 183;或者交换十位和个位,得到 183 和 372,乘积是 68076
交换个位,或者交换百位和十位。
测试点编号 | a, b ≤ | 特殊性质 |
1 − 2 | 9 |
|
3 − 4 | 99 |
|
5 − 6 | 999 |
|
7 | 999999 | 数位中不包含 0 |
8 − 10 | 999999 |
/upload/file/20240817/20240817113500_57961.zip
/upload/file/20240817/20240817113508_13105.zip
/upload/file/20240817/20240817113517_23582.zip
#include<bits/stdc++.h>
using namespace std;
int g[4],s[4],b[4],q[4],w[4],sw[4];
int main(){
int input1,input2;
cin>>input1>>input2;
g[0]=input1/1%10;
g[1]=input2/1%10;
s[0]=input1/10%10;
s[1]=input2/10%10;
b[0]=input1/100%10;
b[1]=input2/100%10;
q[0]=input1/1000%10;
q[1]=input2/1000%10;
w[0]=input1/10000%10;
w[1]=input2/10000%10;
sw[0]=input1/100000%10;
sw[1]=input2/100000%10;
long long kkk=0;
int i=1;
for(int j=0;j<=1;j++){
for(int k=0;k<=1;k++){
for(int l=0;l<=1;l++){
for(int m=0;m<=1;m++){
for(int n=0;n<=1;n++){
long long t1=(sw[i]*100000)+(w[j]*10000)+(q[k]*1000)+(b[l]*100)+(s[m]*10)+g[n];
long long t2=(sw[!i]*100000)+(w[!j]*10000)+(q[!k]*1000)+(b[!l]*100)+(s[!m]*10)+g[!n];
long long m=t1*t2;
if(m>kkk)kkk=m;
}
}
}
}
}
cout<<kkk;
return 0;
}