求出循环小数的开始位置(小数点之后的位数)和循环长度

博客探讨了一道关于循环小数的数学问题,指出在循环小数中,循环内的数字不会重复,并利用桶排序的思想来解决如何确定循环开始位置和循环长度的问题。
摘要由CSDN通过智能技术生成

具体题目如下图。

 循环小数中,一个循环内相同的数是不会出现两次的,循环数的范围又在0~9,所以可以使用桶的思想。

#include <iostream>
#include <vector>
using namespace std;

int main() {
	int x;
	int y;
	cin >> x >> y;

	int rest = -1, index = 0;
	vector<int> vec(y, -1);//记录循环中出现了哪些数

	while (true) {
		rest = x % y;
		if (rest == 0) {//除断,没有循环
			cout << index << " 0" << endl;
			break;
		}
		else {//没有除断时,如果这个循环数没有出现过,则将桶中该数置为1,否则就是进入了第二个循环
			index++;
			if (vec[rest] == -1) {
				vec[rest] = index;
				x = rest * 10;
			}
			else {
				cout << vec[rest] - 1 << " " << index - vec[rest] << endl;
				break;
			}
		}
	}
	return 0;
}

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值