uva 550 - Multiplying by Rotation

来源:互联网 发布:sql表结构增删改查 编辑:程序博客网 时间:2024/04/28 15:56

题意:给一个进制数   最后一位数   和  乘数      要求求出最小的位数    满足   最后一位数变成第一位   其余的数不变  位置可以变  

下面是copy 别人的分析:

原文地址:UVA 550 Multiplying by Rotation 解题报告作者:Code_Life_LiWan
这个题一开始没看懂什么意思,所以就放在那没做,还是今天pengnix跟我说了这个题,才开始做的。
题目就是给出三个数,jinzhi,lastnumber,chengshu.求出在jinzhi进制下最少几位数a使得a*chengshu的值最后一位变成最前一位,其他不变。为了说明问题,还是拿题目说明测试数据来说吧。
179487 * 4 = 717948(10进制)
4*7=28     28!=7    28/10=2    28=8;
4*8+2=34    34!=7    37/10=3    34=4;
4*4+3=19    19!=7    19/10=1    19=9;
4*9+1=37    37!=7    37/10=3    37=7;
4*7+3=31    31!=7    31/10=3    31=1;
4*1+3=7      7==7;(end)


为什么可以这样做呢     我们可以观察到   前一个数的余数一定是下一个数的乘数    这样算下来就满足    最后一位数变成第一位   其余的数不变的条件了 

#include<cstdio>int main(){    #ifdef LOCAL    freopen("in.txt","r",stdin);    #endif // LOCAL    int b,last,f;    while(scanf("%d%d%d",&b,&last,&f) !=EOF)    {        int i,cnt,N;        N = last;        i = cnt = 0;        while(1)        {            if(last*f+i == N)            {                cnt++;                break;            }            cnt++;            last = last*f+i;            i = last/b;            last = last % b;        }        printf("%d\n",cnt);    }    return 0;}


原创粉丝点击