整数输入有理循环小数 1/7 = 0.142857142... 是个无限循环小数。 任何有理数都可以表示为无限循环小数的形式。 本题目要求即是:给出一个数字的循环小数表示法。...

这段时间个人几篇文章介绍了改整数输入的文章. 关联文章的地址

/*	有理环循小数
1/7 = 0.142857142... 是个无限环循小数。
任何有理数都可以示表为无限环循小数的情势。
本目题要求是即:给出一个数字的环循小数示表法。
例如:
输入:
1,5
则出输:
0.2

输入:
1,7
则出输:
0.[142857]
输入:
7,6
则出输:
1.1[6]
用户输入的格式是:
整数,整数
每一个整数范围均为:1~1000
程序出输两个整数做除法生产的小数或无限环循小数(环循节用方括号括起)。
 */
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;

public class 有理数的环循节 {
	public static String f(int m,int n){
		StringBuffer sb = new StringBuffer();	// 保存结果
		List<Integer> lis = new ArrayList<Integer>();	// 记载全部余数
		String s = m/n+".";	// 保存整数分部
		m = m%n;		// 失掉余数
		while(m!=0){
			if(lis.contains(m)){
				int i=0;	// 失掉环循节开始的置位 i
				for(;i<sb.length();i++){
					if(sb.charAt(i)-'0'==m*10/n){
						break;
					}
				}
				sb.insert(i,"[");	// 为环循节加添"[  ]"
				sb.insert(sb.length(),"]");
				break;
			}else{
				lis.add(m);		// 加添商
				sb.append(m*10/n);	// 加添结果素元
			}
			m = m*10%n;	// 失掉余数
		}
		return sb.insert(0, s).toString();
	}
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		System.out.println("整数范围均为:1~1000(格式: 整数,整数  )");
		String s = scan.nextLine();
		String[] ss = s.split(",");
		int m = Integer.parseInt(ss[0]);
		int n = Integer.parseInt(ss[1]);
		System.out.println(f(m,n));
	}
}
    每日一道理
盈盈月光,我掬一杯最清的;落落余辉,我拥一缕最暖的;灼灼红叶,我拾一片最热的;萋萋芳草,我摘一束最灿的;漫漫人生,我要采撷世间最重的———毅力。

    运行结果:

整数范围均为:1~1000(格式: 整数,整数  )
1,7
0.[142857]

文章结束给大家分享下程序员的一些笑话语录: 苹果与谷歌之争就是封闭收费与自由免费思想之争。(别急着把google来膜拜哦?那可是一家公司,以赚钱为目标的公司!当年我Party就是这样把广大劳动人民吸引过来的。今天的结果你们都看到了。)

### 回答1: 0.1在二进制下是无限循环小数的原因是因为它无法用有限的二进制位数来精确表示。计算机存储数字时,使用二进制表示,但是二进制不能精确地表示一些十进制小数,例如1/10。因此,在计算机中表示0.1时,会使用一个无限循环的二进制数来逼近0.1。具体来说,0.1的二进制表示是0.0001100110011001100110011001100110011001100110011……,其中1100循环出现。这是因为0.1可以表示为1/10,而1/10在二进制下是无限循环的。 ### 回答2: 在二进制下,我们使用的是以2为基数的数制,而不是以10为基数的十进制。因此,数字0.1无法精确地表示为二进制数。 在二进制中,小数部分的每个位代表的是2的负幂。例如0.1表示为二进制时,小数部分的第1位表示2的-1次方,第2位表示2的-2次方,以此类推。 但是,当我们尝试用二进制表示0.1时,它会变成无限循环小数,因为没有一个有限的二进制分数可以精确地等于0.1。这是因为0.1在二进制表示中的二进制分数是无限的。 具体来说,0.1在二进制中以0.0001100110011……的形式循环。这是由于0.1无法精确地表示为有限的二进制分数。所以,我们使用近似值0.0001100110011来表示0.1。 总之,0.1在二进制下是一个无限循环小数,无法精确地表示为有限的二进制分数。我们可以使用近似值来表示它。 ### 回答3: 0.1在二进制下是一个无限循环小数,这是因为在二进制系统中,只有有限的位数可以表示一个十进制小数。当我们把0.1转换成二进制时,会发现它无法精确地表示,因此会出现无限循环。 具体来说,我们将0.1转换成二进制的过程如下: 1. 首先将0.1乘以2,得到0.2。整数部分为0,小数部分为0.2。 2. 再将0.2乘以2,得到0.4。整数部分为0,小数部分为0.4。 3. 继续将0.4乘以2,得到0.8。整数部分为0,小数部分为0.8。 4. 接着将0.8乘以2,得到1.6。整数部分为1,小数部分为0.6。 5. 再将0.6乘以2,得到1.2。整数部分为1,小数部分为0.2。 以此类推,我们会发现,每次乘以2后的小数部分都不断变化,在二进制下不会停止。这是因为0.1无法在有限的位数内精确地表示,所以会出现无限循环的情况。 因此,0.1在二进制下的表示一个无限循环小数:0.0001100110011001100110011001100110011001100110011……。这种无限循环表示限制了我们在计算机中对小数的精确表示,需要注意在使用二进制表示小数时可能产生的舍入误差。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值