问题描述
由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。
比如:
210×6=1260
8×473=3784
27×81=2187
都符合要求。
如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。
题目解析
需要对四位数进行循环遍历,再用字符串检验是否满足题目所给的要求。
C++代码
#include<bits/stdc++.h>
using namespace std;
bool check(int src,int r)
{
string src_s;
string r_s;
stringstream ss;
ss<<src;
ss>>src_s;
stringstream ss1;
ss1<<r;
ss1>>r_s;
sort(src_s.begin(),src_s.end());
sort(r_s.begin(),r_s.end());
return src_s==r_s;
}
int ans = 0;
int main()
{
for(int i=1;i<10;i++)
{
for(int j=0;j<10;j++)
{
if(i!=j)
{
for(int k=0;k<10;k++)
{
if(j!=k&&k!=i)
{
for(int l=0;l<10;l++)
{
if(k!=l&&l!=j&&l!=i)
{
int src = i*1000+j*100+k*10+l;
if(j!=0)
{
int r1 = i*(j*100+k*10+l);
if(check(src,r1)) ans++;
}
if(i!=0&&k!=0)
{
int r2 = (i*10+j)*(k*10+l);
if((i*10+j)<(k*10+l)&&check(src,r2)) ans++;
}
}
}
}
}
}
}
}
cout<<ans<<endl;
return 0;
}