您的位置:首页 > 其它

UVA 550 - Multiplying by Rotation

2017-09-06 15:00 351 查看
题目大意:输入k,w,c。在k进制下,一个以w为个位数的数N乘上c的结果,为将这个N的个位数移动到第一位。求这个N最少几位数。例如10 7 4, 最少位数情况为 179487 * 4 = 717948。

解题思路:首先n是原数的最低位,那么n*m%k就是原数的倒数第二位,也就是后一个数的最后一位,那么依次类推,可以把后一个数全部推出来,直到乘数加进位等于n,结束。

ac代码:
#include<iostream>
using namespace std;
int main(){
int k, w, c, t1, t2, t3;
while (scanf("%d%d%d", &k, &w, &c)!=EOF){
t1 = w, t2 = 0;
for (int i=1; ; i++){
if (t1 * c  + t2 == w){
printf("%d\n", i);
break;
}
t3 = (t1 * c + t2) % k;
t2 = (t1 * c + t2) / k;
t1 = t3;
}
}
} 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: