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

博客探讨了一道关于循环小数的数学问题,指出在循环小数中,循环内的数字不会重复,并利用桶排序的思想来解决如何确定循环开始位置和循环长度的问题。
摘要由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;
}

 

 

 

以下是一个简单的Python代码示例,可以实现从键盘输入一批数值并进行上下行小数点对齐的输出: ```python nums = [] max_len = 0 # 读取输入的数值并记录最大长度 while True: try: num = float(input()) nums.append(num) max_len = max(max_len, len(str(num).split('.')[1])) except: break # 输出格式化后的数值,保留3位小数并进行上下行小数点对齐 for num in nums: print('{0: >{1}.{2}f}'.format(num, max_len+4, 3)) ``` 在这个代码中,首先我们创建了一个空列表 `nums` 和一个变量 `max_len`,用于分别存储输入的数值和最大小数位数。接着,我们使用一个 `while` 循环来读取用户从键盘输入的数值,直到输入结束为止。在读取每个数值时,我们将其转换为浮点数并添加到 `nums` 列表中,然后使用 `len()` 函数和 `split()` 方法获取该数值的小数位数,并将其与 `max_len` 变量比较,更新最大小数位数。 接下来,我们使用一个 `for` 循环遍历 `nums` 列表中的每个数值,并使用字符串格式化来对其进行格式化输出。具体地,我们使用字符串格式化方法 `format()` 来将每个数值转换为一个字符串,并使用格式字符串 `'{0: >{1}.{2}f}'` 来进行格式化。这个格式字符串中,`{0}` 表示要格式化的数值,`{1}` 和 `{2}` 分别表示总宽度和小数位数。其中,`>` 表示右对齐,空格表示填充字符,`f` 表示浮点数类型。通过将总宽度设置为 `max_len+4`,我们可以保证所有数值的小数点在同一列上对齐。最后,我们使用 `print()` 函数将格式化后的字符串输出到控制台。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值