如题:
小明正看着 203879 这个数字发呆。
原来,203879 * 203879 = 41566646641
这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。
具有这样特点的6位数还有一个,请你找出它!
再归纳一下筛选要求:
1. 6位正整数
2. 每个数位上的数字不同
3. 其平方数的每个数位不含原数字的任何组成数位
答案是一个6位的正整数。
直接上代码:
#include <stdio.h>
int main()
{
long long i,j,k,m,n;
int x=1,y=1;//备用
long long a[6];//这是给那几个每个数位都是不同的数准备的
long long b[12];//这是给那些数的平方准备的,六位数平方最大也不超过十二位
for(i = 100000; i < 999999; i++){
j = i;
for(n=0;j>0;n++)
{
k = j%10;
a[n] = k;//把i的每一位都放到a[]中去
j = j/10;
}
if(a[0]!=a[1]&&a[0]!=a[2]&&a[0]!=a[3]&&a[0]!=a[4]&&a[0]!=a[5] && a[1]!=a[2]&&a[1]!=a[3]&&a[1]!=a[4]&&a[1]!=a[5]
&& a[2]!=a[3]&&a[2]!=a[4]&&a[2]!=a[5] && a[3]!=a[4]&&a[3]!=a[5] && a[4]!=a[5])
//上面是笨方法,本来我认为用了个自以为很方便的方法,然后做完了之后,找bug找了一个多小时,没找出来。用了笨方法就行了。。(实际是我菜)
{
j = i*i;
k = j%10;
n = 0;
while(j > 0){
b[n] = k;//把b存进去
j = j/10;
k = j%10;
n++;
}
for(n = 0; n <= 5; n++){
for(m = 0; m <= 11; m++){
//比较a和b是否有重合
if(a[n] == b[m]) goto loop;
}
loop:if(n!=6 && m!=12)break;
}
if(n == 6 && m == 12&&i!=203879)
{
printf("%lld\n",i);//没有的话就输出
}
}
}
}
下面是运行图:
啊。做题用了50分钟左右,运行不出结果,慢慢慢慢纠正找错,debug用了一个多小时!
xdm!以后谨慎写代码!