一道题,大家帮我看看,我觉得我的程序写得没错,为什么算不出来
5940376182这个数,是个10位数,它的特点就是从数字0到9刚好每个都只出现了一次。如果把这个数从中间劈开,会分别成为两个5位数 59403 和 76182这两个数的平方是:
59403^2 = 3528716409
76182^2 = 5803697124
新算出来的这两个数,还是一个具有从0到9刚好每个数字之出现一次的特点。
写程序找出所有像 5940376182这种特点的10位数。
下面是我的程序:
我的思路是,自己写一个函数,这个函数里分成三步,检验每一个10位数的特点。
检查每个10位数的时候,都用数组的下标来完成。
这个函数总共有3步:
1. 检查这个10位数本身是不是具有0到9不重复的特点。
2. 把这个10位数拆开,取前5位,检查这个5位数的平方。
3. 取后5位,检查后5位的平方。
如果这三部都符合要求,那最终函数会返回1。
程序就会输出我想要的结果了。
#include <stdio.h>
#include <conio.h>
int check(long long n)
{
int temp1[10]={0};
int temp2[10]={0};
int temp3[10]={0};
/*
int i;
printf("In the checking function: \n");
printf("The value of temp1:\n");
for(i=0;i<10;i++)
printf("%d: %s\n",i,temp1[i]);
*/
long long del;
for(;n;n/=10)
if(++temp1[n%10] > 1)
return 0;
del = (n / 100000) * (n / 100000);
for(;del;del/=10)
if(++temp2[del%10] > 1)
return 0;
del = (n % 100000) * (n % 100000);
for(;del;del/=10)
if(++temp3[del%10] > 1)
return 0;
return 1;
}
int main (void)
{
long long i;
for(i=1023456789;i<=1023456790;i++)
{
//printf("Checking number: %I64d\n",i);
if(check(i)==1)
{
printf(" %I64d\n",i);
}
}
printf("DONE!\n");
getch();
}