面试:输出循环小数的循环节

简介: 一.引入         偶然在网上看见的,手痒了,就试了试,哈哈。。。。。。。做出来了,实际就是模拟。         下面的来自维基百科:循环小数是从小数部分的某一位起,一个数字或几个数字,依次不断地重复出现的小数。

一.引入

        偶然在网上看见的,手痒了,就试了试,哈哈。。。。。。。做出来了,实际就是模拟。

        下面的来自维基百科:循环小数是从小数部分的某一位起,一个数字或几个数字,依次不断地重复出现的小数。

        循环小数即为有理数的小数表示形式,例:

              1

         定理:一个分母为N的循环小数的循环节位数最多不超过N-1位。

       (1) 化为分数的方法

              我先想到用高中的等比数列的和求极限方式求取(a1/(1-q))。

                       2
         (2)利用长除法可以将分数(有理数)转化为循环小数。
                         3

                         4

二.Java实现

import java.util.Arrays;
 
public class Xiaoshuo {
 
	//使用char类型可以省内存也可以直接存储小数点
	static char[] ch = new char[20];
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Arrays.fill(ch,'#');
		int a = 5;
		int b = 4;
		int index = 0;
		//在函数外部做处理方便多了
		if(a>=b) {
			if(a%b==0) {
				System.out.println(a/b+".0");
				return ;
			}
			System.out.print(a/b);
			ch[0] = '.';
			index = 1;
			a = a%b;
		}else {
			ch[0] = '0';
			ch[1] = '.';
			index = 2;
		}
		solve(index,a,b);
	}
 
	private static void solve(int index, int a, int b) {
		// TODO Auto-generated method stub
		//判断余数(你也可以叫商,好好看除法过程)是否出现过
		int from = -1;
		int to = -1;
		while(from==-1) {
			a *= 10;
			//必须加上48
			ch[index++] = (char)(a/b + 48);
			//不能再找到自身,所以需要第二个参数
			from = tell((char)(a/b+48),index-2);
			a = a%b;
		}
		to = index -2;
		for(int i=0; i<from; i++) {
			System.out.print(ch[i]);
		}
		System.out.print("{");
		for(int i=from; i<=to; i++) {
			System.out.print(ch[i]);
		}
		System.out.println("}");
		
	}
 
	private static int tell(char mod, int xiabiao) {
		// TODO Auto-generated method stub
		//先找到小数点后一位
		char c = ch[0];
		//index必须从0开始,因为有可能第一个就是小数点
		int index = 0;
		while(c!='.') {
			index++;
			c = ch[index];
		}
		//index是小数点的位置,所以从下一位开始
		index++;
		//采用while(mod1=‘#’)循环不行,这样是最好的,既有下标,又到非法字符处结束(前提是数组比较大,填充了非法字符)
		for(int i=index; i<=xiabiao; i++) {
			if(mod==ch[i])
				return i;
		}
		return -1;
	}
 
}

 

三.感悟
        在函数外部先做数据处理化成统一格式方便多了。。。。。。。

目录
相关文章
|
算法 Java
7.Java判断和循环+面试相关力扣算法题详解
7.Java判断和循环+面试相关力扣算法题详解
226 1
|
JavaScript 前端开发
【面试题】在JS循环中使用await会怎么样?
【面试题】在JS循环中使用await会怎么样?
150 0
|
前端开发 JavaScript 程序员
(面试题) 面试官:如何在forEach的循环里使用break
(面试题) 面试官:如何在forEach的循环里使用break
167 0
|
前端开发 JavaScript 算法
前端面试100道手写题(7)—— 循环轮播图
前端面试100道手写题(7)—— 循环轮播图
300 0
用好PDCA循环法,轻松slay面试
如何在面试中完美发挥?可以借鉴PDCA循环法。P(Plan):规划面试策略和简历;D(Do):准备面试技巧、刷题等;C(Check):通过模拟面试提升表达能力;A(Act):复盘面试问题,查漏补缺,避免重复错误。这一科学方法有助于系统性地提升面试表现。
最新【Python】 实现循环最快的方式_python while循环加速,2024年最新阿里php面试题
最新【Python】 实现循环最快的方式_python while循环加速,2024年最新阿里php面试题
|
11月前
|
C语言
经典面试题:嵌入式系统中经常要用到无限循环,怎么样用C编写死循环呢
在嵌入式系统开发中,无限循环常用于持续运行特定任务或监听事件。使用C语言实现死循环很简单,可以通过`while(1)`或`for(;;)`的结构来编写。例如:`while (1) { /* 循环体代码 */ }`,这种写法明确简洁,适用于需要持续执行的任务或等待中断的场景。
|
存储 缓存 Java
明知面试要问spring循环依赖,很多人还是搞不懂!
Spring中的循环依赖一直是Spring中一个很重要的话题,一方面是因为源码中为了解决循环依赖做了很多处理,另外一方面是因为面试的时候,如果问到Spring中比较高阶的问题,那么循环依赖必定逃不掉。如果你回答得好,那么这就是你的必杀技,反正,那就是面试官的必杀技,这也是取这个标题的原因,当然,本文的目的是为了让你在之后的所有面试中能多一个必杀技,专门用来绝杀面试官!
77 0
|
前端开发 程序员
【面试题】在循环 for、for-in、forEach、for-of 、map中改变item的值,会发生什么?
【面试题】在循环 for、for-in、forEach、for-of 、map中改变item的值,会发生什么?
120 0
2024年最新【Python】循环结构:while 循环(1),阿里巴巴面试常见问题及回答技巧
2024年最新【Python】循环结构:while 循环(1),阿里巴巴面试常见问题及回答技巧
2024年最新【Python】循环结构:while 循环(1),阿里巴巴面试常见问题及回答技巧