排它平方数 求帮忙
题目标题: 排它平方数
小明正看着 203879 这个数字发呆。
原来,203879 * 203879 = 41566646641
这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。
具有这样特点的6位数还有一个,请你找出它!
再归纳一下筛选要求:
1. 6位正整数
2. 每个数位上的数字不同
3. 其平方数的每个数位不含原数字的任何组成数位
答案是一个6位的正整数。
#include<stdio.h>
main()
{
long song(long x);
long i,ji;
for(i=100000;i<=999999;i++)
{
if(song(i)) continue;
else
{ji=i*i;
if(song(ji)) printf("%ld ",i);
}
}
return 0;
}
long song(long x)
{ long static b[12],i,j;
if(x<=999999)
{
b[0]=x/100000;
b[1]=x/10000%10;
b[2]=x/1000%10;
b[3]=x/100%10;
b[4]=x/10%10;
b[5]=x%10;
b[12]=b[10]=b[9]=b[8]=b[7]=b[6]=b[5];
for(i=0;i<5;i++)
for(j=i+1;j<=5;j++)
{ if(b[i]==b[j]) goto mm; }
return 0;
mm: return 1; }
if(1e6<=x&&x<=1e11){
long a[11];
a[0]=x/10000000000;
a[1]=x/1000000000%10;
a[2]=x/100000000%10;
a[3]=x/10000000%10;
a[4]=x/1000000%10;
a[5]=x/100000%10;
a[6]=x/10000%10;
a[7]=x/1000%10;
a[8]=x/100%10;
a[9]=x/10%10;
a[10]=x%10;
for(i=0;i<10;i++)
for(j=i+1;j<=10;j++)
{ if(a[i]==a[j]||a[i]==b[i]) goto mm1; }
return 0;
mm1: return 1; }
if(1e11<=x&&x<1e12){
long a[12];
a[0]=x/100000000000;
a[1]=x/10000000000%10;
a[2]=x/1000000000%10;
a[3]=x/100000000%10;
a[4]=x/10000000%10;
a[5]=x/1000000%10;
a[6]=x/100000%10;
a[7]=x/10000%10;
a[8]=x/1000%10;
a[9]=x/100%10;
a[10]=x/10%10;
a[11]=x%10;
for(i=0;i<10;i++)
for(j=i+1;j<=10;j++)
{ if(a[i]==a[j]||a[i]==b[i]) goto mm2; }
return 0;
mm2: return 1; }
}
用long会溢出,为什么用long long 型会错误呀!