44、求分数的精确值

#include<iostream>
using namespace std;
/*
1、求分数的精确值?  

问题描述:精确计算两个100之间的整数相除。 

如果是有限小数,直接输出。

如果是无限循环,则输出循环的起始和结束位置。

解题思路:1.利用一个数组 quotient[]存放商的数组。
2、然后将余数乘以10,然后计算商的下一位。重复操作。
3、当余数某次为 0 的时候,则表示的是一个有限不循环小数。
4、如何判断是为无限循环小数。通过判断某次计算出现的余数,与前面的某个余数相同。从该余数第一次出现之后求得各位数,就是小数的循环节。
所以需要开辟一个  remainder[] 数组。
*/
int main(){

	int m,n;

	cin >> m >> n;

	int  quotient[101] = {0};  //存放除法商的数组

	int   remainder[101] = {0};//存放余数的数组  下标是为余数,数组的值为余数对应商的位数。

	cout << m << "/" << n << "=0.";

	for (int i = 1; i <= 100; i++) //i 表示商的位数
	{
		remainder[m] = i;  //第一个余数为  m   m:为除的余数。remainder[m] 为余数对应商的位数。

		m *= 10;

		quotient[i] = m / n; //求商

		m = m%n;  //求余数

		if (m == 0){  //如果余数为 0 
			for (int j = 1; j<=i; j++){  //输出所以的商。
				cout << quotient[j];
			}
			break;
		}

		if (remainder[m] != 0){  //如果余数对应的位在以前出现过。
			for (int j = 1; j <= i; j++){  //输出所以的商。
				cout << quotient[j] ;
			}
			cout << "\n 是无限循环小数,并从小数点后," << remainder[m] << "位"
				<< "到" << i << "位" << endl;
			break;
		}

	}

	system("pause");

}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值