链接:
题意:
给你一个分数a/b,和一个目标数c,将a/b转化为小数,看小数点后第几位为目标数,如果没有,输出-1,a, b, c (1 ≤ a < b ≤ 10^5, 0 ≤ c ≤ 9)
思路:
模拟除法,使用map记录被除数,如果后面出现记录过的被除数,输出-1。
代码:
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<iostream>
#include<map>
using namespace std;
map<int, int> m1;
int main() {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
int now = 0, wei = 0, q1, q2;
a *= 10;
while (1) {
m1[a]++;
if (a < b) {
wei++;
if (a == 0)a = 10;
else a *= 10;
now = 0;
}
else {
now = a / b;
a = a % b;
wei++;
a *= 10;
}
if (now == c) {
printf("%d\n", wei);
break;
}
if (m1[a]) {
printf("-1\n");
break;
}
}
return 0;
}