L1-046. 整除光棍

题目链接:https://www.patest.cn/contests/gplt/L1-046

思路:见下图,红色为商,绿色为余数,光棍数除以一个数的规律为:1.以大于除数的光棍数作为被除数,进行除法计算,2.然后在余数末尾加1作为个位,作为新的被除数,商即为最后结果的相应位上的数值。3.重复2,直到最后能够整除,

 

(1)当输入即为光棍数时:则s=1;位数也即输入数N的位数。简单!

(2)当输入不为光棍数时:可以发现:用比N多一位的光棍数除以N,若不能整除,则输出商,然后其余数乘10加1,作为新的被除数,光棍数位数加一,继续判断,直到能够整除。

注意点:

应该注意位数的判断及商与余数的变化。

 1 #include<stdio.h>
 2 #include<math.h>
 3 int main()
 4 {
 5     int N;
 6     scanf("%d",&N);
 7     int i,x,n;
 8     i=1,n=N,x=1;;
 9     while(n/10)
10     {
11         n/=10;
12         x+=pow(10,i);
13         i++;
14     }
15     if(N==x)
16     {
17         printf("1 %d\n",i);
18         return 0;
19     }
20     x+=pow(10,i);   //比N多一位的光棍数 
21     while(x%N)
22     {
23         printf("%d",x/N);
24         x=(x%N)*10+1;
25         i++;
26     } 
27     printf("%d %d\n",x/N,i+1);
28     return 0;
29 }

 

posted @ 2018-01-18 12:38  爱你的笑  阅读(889)  评论(0编辑  收藏  举报