UVA 550 - Multiplying by Rotation

来源:互联网 发布:刘慧芳 知乎 编辑:程序博客网 时间:2024/04/28 19:25
       数学题,一开始题意没太看懂,后来发现其实并不难,题目给出三个数:k,m,n;k进制,一个数ans的最后一位m,乘数n,要求求出最小的ans的位数,满足ans*n的第一位是ans的最后一位,其他位上的数字不改变,即如果ans=abcdefg,那么ans*n=gabcdef;
      因为ans的最后一位为m,则ans*n的最后一位为ans*n%k,而ans*n%k又是ans的倒数第二位,这样又可以计算出ans*n的倒数第二位;

AC code :

#include<cstdio>
int main()
{
    int k,m,n,tem;
    while(scanf(\"%d%d%d\",&k,&m,&n)!=EOF)
    {
        int cnt= 1,ans=m*n;
        while(ans!=m)
        {
            ans = ans % k * n + ans / k;
            cnt++;
        }
        printf(\"%d\\n\",cnt);
    }
    return 0;
}