小明正看着 203879 这个数字发呆。
原来,203879 * 203879 = 41566646641
这有什么神奇呢?仔细观察,203879是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。
具有这样特点的6位数还有一个,请你找出它!
再归纳一下筛选要求:
1. 6位正整数
2. 每个数位上的数字不同
3. 其平方数的每个数位不含原数字的任何组成数位
答案是一个6位的正整数。
//运用到了大数乘法原理
#include<stdio.h>
#define N 20
int a[N]={0},re[2*N]={0};
int place(){
int i,j;
for(i=0;i<6;i++)
for(j=i+1;j<6;j++)
if(a[i]==a[j])
return 0;
return 1;
}
int main(){
int i,j,k,temp,flag;
for(k=100000;k<999999;k++){
temp=k;
for(i=0;i<6;i++){
a[i]=temp%10;
temp/=10;
}
if(!place())
continue;
for(i=0;i<2*N;i++)
re[i]=0;
for(i=0;i<6;i++){
for(j=0,temp=0;j<6;j++){
re[i+j]+=a[i]*a[j]+temp;
temp=re[i+j]/10;
re[i+j]%=10;
}
if(temp>0)
re[i+j]+=temp;
}
i=2*N-1;
while(re[i--]==0);
temp=i+1;
for(++i,flag=1;i>=0&&flag;i--)
for(j=0;j<6;j++)
if(a[j]==re[i]){
flag=0;
break;
}
if(flag)
printf("%d\n",k);
}
return 0;
}