找出符合以下条件的Troitsky数,将该数的首位数字移动到末位数字之后得到的数是原数的整数倍
例如:将142857的首位数字1移动到末位之后得到的数是428571,而428571=3*142857,因此142857是Troitsky数
编程要求:
(1) 编写函数int Troitsky(long a[]),其功能是求出10000以内的所有Troitsky数,并将它们依次放入a指向的数组中,函数返回找到的Troitsky数的个数.
(2)编写main函数,调用Troitsky函数,将运行结果输出到屏幕。
#include <stdio.h>
#define N 10000
int Troitsky(long a[N]);
int main()
{
long a[N];
int i;
long m;
m = Troitsky(a); //m是找到的个数
printf("num is : %d\n",m);
for(i = 0;i < m;i++) //输出找到的数,每行打印五个
{
printf("%6d",a[i]);
if((i + 1)%5 == 0)
{
printf("\n");
}
}
printf("\n");
return 0;
}
int Troitsky(long a[])
{
int n;
int i,j,k;
int m, y = 0;
for(i = 1;i <= N;i++) //从1到10000找
{
n=0; //n记录整数i的位数
j = i;
while(j)
{
j = j/10;
n++;
}
j = i;
for(k = 1;k < n;k++) //找出最高位
{
j = j /10;
}
m = j;
for(k = 1;k < n;k++) //把最高位一直乘以10,直到位数和i一样
{
j = j*10;
}
j = (i - j) * 10 + m; //得到高位放到末尾的数
if(j % i == 0 && j >= i) //如果是Troitsky数就放到数组里面
{
a[y] = i;
y++;
}
}
return y;
}