标题:神奇算式
由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。
比如:
210 x 6 = 1260
8 x 473 = 3784
27 x 81 = 2187
都符合要求。
如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。
请填写该数字,通过浏览器提交答案,不要填写多余内容(例如:列出所有算式)。
#include<iostream>
#include<algorithm>
using namespace std;
int len(int n)
{
int k=0;
for(;n;k++)
n/=10;
return k;
}
bool judgeRepeat(char a[])
{
for(int i=0;i<3;i++)
for(int j=i+1;j<4;j++)
if(a[i]==a[j])
return true;
return false;
}
bool judge(int i,int j)
{
char ai[5]={0},aj[5]={0};
itoa(i,ai,10);
itoa(j,ai+strlen(ai),10);
if(judgeRepeat(ai))
return false;
itoa(i*j,aj,10);
if(judgeRepeat(aj))
return false;
sort(ai,ai+4);
sort(aj,aj+4);
for(int i=0;i<4;i++)
if(ai[i]!=aj[i])
return false;
return true;
}
int main()
{
int i,j,counter=0;
for(i=1;i<100;i++)
for(j=1023/i;j<=9876/i;j++)
if(j>i&&len(i)+len(j)==4&&judge(i,j))//j>i in case of repeat
{
cout<<i<<"*"<<j<<"="<<i*j<<endl;
counter++;
}
cout<<counter<<endl;
return 0;
}