UVa 550 - Multiplying by Rotation

来源:互联网 发布:启明软件待遇 编辑:程序博客网 时间:2024/04/28 20:14

题目:给你一个X数字的尾数k,进制m以及一个乘数n,求使得X*n等于k*10^log(X)+(X/10)。 

            即使得X的尾数放在首位,其余数字整体向后移动一位。求X的最小值。

分析:模拟。每次利用当前为计算下一位即可。F(i+1) = (F(i)*n + save(i))%m。

            save为上一次计算的进位,save(i+1) = (F(i)*n + save(i))/m。

说明:在纸上模拟一下运算就清楚了。

#include <iostream>#include <cstdlib>#include <cstdio>using namespace std;int main(){int m,k,n;while ( ~scanf("%d%d%d",&m,&k,&n) ) {int count = 1,now = k,save = 0,temp;while ( now*n+save != k ) {temp = now;now  = (temp*n+save)%m;save = (temp*n+save)/m;count ++;}printf("%d\n",count);}return 0;}

0 0
原创粉丝点击