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 }