您的位置:首页 > 其它

uva 550 - Multiplying by Rotation

2013-08-20 10:07 393 查看
题意:给一个进制数   最后一位数   和  乘数      要求求出最小的位数    满足   最后一位数变成第一位   其余的数不变  位置可以变  

下面是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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数论 模拟