题目:550 - Multiplying by Rotation
#include<stdio.h>
int d, n, m;
int main() {
int a , y, k;
while(scanf("%d %d %d", &d, &n, &m) != EOF) {
a = 0; y = n;
k = (y * m + a);
y = k % d ;
a = k / d;
int count = 1;
while(a || y != n) {
k = (y * m + a);
y = k % d ;
a = k / d;
count ++;
}
printf("%d\n", count);
}
return 0;
}
题目大意:就是给一个数n,求他再进制d的情况下使低位的n变成高位第一位,求这样的数的位数。
解题思路: k = n与乘数m相乘 + a,k 除以进制d得到的余数作为下一轮的乘数,得到的商最为下一轮的a, 位数加1。直到a == 0 && 余数 == 原来的n 就退出,输出位数。