求解所有的水仙花数(回归数)----大数字位数量级别的运算算法 (二)

2014-11-24 02:46:56 · 作者: · 浏览: 3
ntf("%08d", sum[i]);
printf("\n");
}
}
else
for (i = 0; i <= b; i ++)
{
num[i] ++;
circle(n-1, i);
num[i] --;
}
}


int sort(void)
{
int i, j, t;
int temp[ds], d[10];

for (i = 0; i < ds; i ++)
temp[i] = sum[i] = 0;

for (i = 0; i <= 9; i ++)
d[i] = 0;

for (i = 1; i <= 9; i ++)
if (num[i])
{
t = 0;
for (j = 0; j < ds; j ++)
{
t = powD[i][j] * num[i] + t;
if (t >= base)
{
temp[j] = t % base;
t /= base;
}
else
{
temp[j] = t;
t = 0;
}
}

t = 0;
for (j = 0; j < ds; j++)
{
t = temp[j] + sum[j] + t;
if (t >= base)
{
sum[j] = t - 100000000;
t = 1;
}
else
{
sum[j] = t;
t = 0;
}
}
}

for (i = ds - 1; i >= 0; i --)
{
t = sum[i];
if (t > 0)
while (t > 0)
{
d[t % 10] ++;
t /= 10;
}
}

for (i = 1; i <= 9; i ++)
if (num[i] != d[i]) return 0;
return 1;
}

int main(void)
{
int i, j;

gettimeofday(&start, NULL);
init();
nextPower(); //是平方
for (i = 2; i <= 40; i ++)
{
N = i;
printf("Search %d...\n", i);
circle(N, 9);
nextPower();
}
return 0;
}