满意答案
chordfly
2013.08.24
采纳率:55% 等级:12
已帮助:7658人
不知道楼主搞懂了没有,我大体看了一下,有点思路的:
思路:
1.将数字提取出最高位,并记录最高位的优先级
2.将原数字减去最高位数字乘以优先级,并乘以10,最终加上这个最高位数字就可以了
(通俗地讲,就是将除了最高位后剩下的数字向前移动一位,并加上最高位充当个位)
3.最后比较就行了,变后的数字是之前的整数倍
我自己没有具体做,只是大体的思路,很详细了,应该很明白了
【随手代码】:
#include
int Troitsky(long a[])
{
int t,j;
int count=0;
long m,n,k,g;
for(m=1;m<=10000;m++)
{
t=1;
g=k=m;
while(k>10)
{
while(g>10)
{
k=g/10;//循环求最大位上的数字
g=g/10;
t=t*10;//记录最大位上的数量级
}
n=(m-k*t)*10+k;
if(n%m==0)
{
count++;
//for(j=0;j<10000;j++)
//a[j]=n;
printf("%ld\n",n);
}
if(m==1000000)
printf("=====");
}
}
}
int main()
{
long a[1000];
Troitsky(a);
return 0;
}
代码应该不全面,但思路很明确,不懂的话再追问吧
希望可以帮到你o(∩_∩)o
具体的实在实现不了我再帮你
01分享举报