精华内容
下载资源
问答
  • 判断分数是否为无限循环小数

    万次阅读 2018-06-12 22:42:12
    之前做编程题,有一个部分需要判断一个分数是否为无限循环小数,挺有意思,特此整理记录如下: 问题描述(大概意思是) 已知分子a和分母b ,判断 分数a/b是否为无限循环小数 1.已知结论 将分数化为最简...

    0.前言

    之前做编程题,有一个部分需要判断一个分数是否为无限循环小数,挺有意思,特此整理记录如下:

    问题描述(大概意思是)
    已知分子a和分母b ,判断 分数a/b是否为无限循环小数

    1.已知结论

    将分数化为最简分数后,分母的全部因数(除去1和其自身)没有为2或5以外的数,则该分数就不是无限循环小数;否则为无限循环小数。

    首先我们看 1/n的实际含义:将 1 分成n份,每一份的大小

    那么10/n的实际含义:将 10 分成n份,每一份的大小

    对于将 10 分成n份这个话题,如果假设每份必须为整数,那么n的取值(去掉1或者10),只能是2或5

    最简分数是否为无限循环小数,与分子没有关系。

    2.问题解决

    2.1求分子分母的最大公约数

    此处可用辗转相除法求最大公约数

    2.2 判断最简分数的分母的因子

    此处可直接将分母分别整除以多次2和5即可

    3.代码实现

    import java.util.Scanner;
    /**
     * @Title:InfiniteLoop.java
     * @author Stone6762
     * @CreationTime 2018年6月12日 下午10:18:39
     * @Description: 判断一个分数是否为无限循环小数
     */
    public class InfiniteLoop {
    
        /**
         * @Title greatestCommonDivisor
         * @Describe求最大公约数
         * @param a
         * @param b
         * @return
         */
        public static long greatestCommonDivisor(long a, long b) {
            long c = 0;
            while (true) {// 循环的辗转相除法
                c = a % b;
                a = b;
                b = c;
                if (b == 0) {
                    return a;
                }
            }
        }
    
        /**
         * @Title isLoop
         * @Describe a/b是否为无限循环小数
         * @param a分子
         * @param b分母
         * @return
         */
        public static boolean isLoop(long a, long b) {
            // 1.化简,分子分母同时除以最大公约数
            long commonDivisor = greatestCommonDivisor(a, b);
            b = b / commonDivisor;
            // 2.判断分母是否为2的次幂,5的次幂,或者2 5结合
            // 首先让其除以2的次幂
            while (b % 2 == 0) {
                b /= 2;
            }
            // 然后让其除以5的次幂
            while (b % 5 == 0) {
                b /= 5;
            }
            // 最后判断是否为1,如果为1 说明没有 2或者5或者2和5结合构成 以外的因子
            if (b == 1) {
                return false;
            } else {
                return true;
            }
        }
    
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            while (scan.hasNext()) {
                int a = scan.nextInt();
                int b = scan.nextInt();
                System.out.println( a+"/"+b+"的结果是否为无限循环小数:   " + isLoop(a, b));
            }
        }
    }

    展开全文
  • 遇到一道算法题,大概是求两数相除(输入两个数,分数形式相除)...那么如何判断两数相除后小数部分为无限循环小数或者为有限小数? 答:当除数(分母)只有2或者5这两个质因数时,就是有限小数;当除数(分母)含...

    遇到一道算法题,大概是求两数相除(输入两个数,分数形式相除)后,结果的小数部分的数的规律,需要了解相关数学的基本知识。

    无理数不可以写成分数形式,而无限不循环小数是无理数,所以无限不循环小数不可以写成分数形式,所以就不需要考虑小数部分是无限不循环小数了。

    那么如何判断两数相除后小数部分为无限循环小数或者为有限小数?

    答:当除数(分母)只有2或者5这两个质因数时,就是有限小数;当除数(分母)含有2和5以外的质因数时就是无限循环小数

    展开全文
  • n≤1000),判断分数m/n是有限小数还是循环小数。 如果m/n是有限小数,则输出分数的值;如果m/n为循环小数,则把循环部分括在括号中,并打印输出。 代码: #include<stdio.h> bool f(int n) //判断是否是有限还是...

    问题
    读人自然数m和n(0≤m<n≤1000),判断分数m/n是有限小数还是循环小数。
    如果m/n是有限小数,则输出分数的值;如果m/n为循环小数,则把循环部分括在括号中,并打印输出。

    代码:

    #include<stdio.h>
    
    bool f(int n)	//判断是否是有限还是循环
    {
    	if (n == 1)
    		return true;
    	else if(n%2==0)
    	{
    		f(n / 2);
    	}
    	else if(n%5==0)
    	{
    		f(n / 5);
    	}
    	else
    	{
    		return false;
    	}
    }
    int gcd(int x, int y)
    {
    	int r;
    	while (x % y)
    	{
    		r = x % y;
    		x = y;
    		y = r;
    	}
    	return y;
    }
    bool find(int *yu,int y)//判断是否找到循环节
    {
    	int i;
    	for (i = 0; i < y-1; i++)
    	{
    		if (yu[y - 1] == yu[i])
    		{
    			return false;		//找到了,跳出循环
    		}
    	}
    	return true;
    }
    void main()
    {
    	int m, n;
    	double d;
    	int x = 0, y = 0, flag, i, gcd0;
    	int zheng, xiao[100] = { 0 }, yu[100] = { 0 }, r, s;
    	puts("请输入自然数m,n(0<=m<n<=1000)");
    	scanf("%d %d",&m,&n);
    	gcd0 = gcd(m, n);
    	m = m / gcd0;
    	n = n / gcd0;		//化为最简分数
    	if (f(n))
    	{
    		d = m*1.0 / n;
    		printf("有限小数:%lf",d);
    	}
    	else
    	{
    		zheng = m / n;
    
    		r = m;
    		s = r * 10 / n;		//第一组
    		xiao[x++] = s;
    		yu[y++] = r;		//存入第一组数据
    
    
    
    		while (find(yu,y))
    		{
    			r = (r * 10) % n;
    			s = r * 10 / n;
    			xiao[x++] = s;
    			yu[y++] = r;
    
    		}
    		for (i = 0; i < y - 1; i++)
    		{
    			if (yu[y - 1] == yu[i])
    			{
    				flag = i;
    			}
    		}
    		printf("循环小数:%d.",zheng);
    		
    		for (i = 0; i < flag; i++)
    		{
    			printf("%d", xiao[i]);		//打印不循环小数部分
    		}
    		printf("(");
    		for (i = flag; i < y - 1; i++)
    		{
    			printf("%d",xiao[i]);		//打印循环小数部分
    		}
    		printf(")");
    
    	}
    

    题目给定了n>m,若m>n,程序可能有点问题,以后有时间再改进。

    展开全文
  • python3 解决除法中循环小数计算并判断循环体 #解决分数变小数,小数位数受到计算机位数限制的问题。任意位小数除法2019.11.25 r = [] # 放结果 x = 0 #-------------计算过程------------------------- def divcal...

    python3 解决除法中循环小数计算并判断循环体

    #解决分数变小数,小数位数受到计算机位数限制的问题。任意位小数除法2019.11.25
    r = [] # 放结果
    x = 0
    #-------------计算过程-------------------------
    def divcal(a,b,c): # 计算主函数 a/b 留c位小数
    a1 = a
    print(a1,b,c)
    if a1 < b : #小于1,打印0.
    a1 = a1 * 10
    print(“0.”,end="")

    else:             #当分子大于分母部分,计算整数部分,余数进行小数部分运算
        a2,a1 = divmod(a,b)
        print(str(a2),end="")
        print( ".", end="")
        a1 = a1 * 10
    while len(r) < c:  #小数部分运算,一直算到指定到位数c
        aplus(a1,b)   #去判断是否小于除数,如果小于就加零
       # print(x)
        a2,a1 = divmod(x,b)
        r.append(a2)
        a1 = a1 * 10
    #print(r)
    for i in  range(0,len(r)):
        print(str(r[i]),end="")
    print("")
    

    #--------除法过程中递归方法找到能运算到数-----------
    def aplus(a1,b): #迭代找到刚好大于除数到数字
    global x #必须声明x是全局变量,否则结果回传不了
    if a1 < b:
    a1 = a1 * 10
    r.append(0)
    aplus(a1,b)
    else:
    x = a1
    return
    #---------找循环节--------------------------
    def findxhj():
    for i in range(0,int(len®/2)): #小数部分起点
    for j in range(1,int(len®/2)): #循环节长度
    str_1 = r[i:i+j]
    str_2 = r[i+j:i+2*j]
    if str_1 == str_2 :
    print(“循环节:”, end="")
    for i in range(0, len(str_1)):
    print(str(str_1[i]), end="")
    print("-----",len(str_1),“位”)
    return

    if name == ‘main’:
    a = 9 # 被除数
    b = 49 # 除数
    c = 200 # 小数位数
    divcal(a, b, c)
    findxhj()

    展开全文
  • JAVA获取无限循环小数的循环节
  • 循环小数

    2020-05-13 18:30:00
    给定一个分数,判断其是否是一个无限循环小数,并输出它的第一个循环节。 例如:分数 1/3 是一个无限循环小数,第一个循环节为 3;而 2/5 不是一个无限循环小数。 输入格式 不多于 100 行,每行一个 m/n 形式的分数...
  • 判断一个分数是否是无限循环小数,求算法
  • 判断一个分数是否为无限循环小数

    千次阅读 2016-12-15 22:12:57
    "m/n 是一个有限不循环小数 0." ); for (i = 1 ; i 100 ; i++) { remainder[ m ] = i; m *= 10 ; quotient[i] = m / n; m = m % n; if ( m == 0 ) { for (j = 1 ; j ; j++) { printf...
  • python再计算无限循环小数的循环节

    千次阅读 2017-05-01 23:02:00
    如果无限小数的小数点后,从某一位起向右进行到某一位止的一节数字循环出现,首尾衔接,称这种小数为循环小数,这一节数字称为循环节。 #寻找1000以内的n,使得1/n的循环小数节长度最长#问题化简,首先不是素数的...
  • 任何有理数都可以表示为无限循环小数的形式。 本题目要求即是:给出一个数字的循环小数表示法。 例如: 输入: 1,5 则输出: 0.2 输入: 1,7 则输出: 0.[142857] 输入: 7,6 则输出: 1.1[6] ...
  • 根据数学知识可知,两整数之商,如果除不尽,将必为有限小数或无限循环小数。所以退出循环的条件某一次除法后为余数为0或者余数循环。 以3/5为例。 步骤 Value 1 3/5=0……3 2 30/5=6……0 此时余数为0...
  • 原理: 分母只含有2或5的任意次方或者2与5结合...除此之外的分数都能化成无限循环小数 #include bool f(int n){ if(1==n)return false; else if(0==n%2){ return f(n/2); } else if(0==n%5){ return f(n/5
  • 如果小数部分为循环小数,则将循环的部分括在括号内。 如果存在多个答案,只需返回 任意一个 。 对于所有给定的输入,保证 答案字符串的长度小于 104 。 示例 1: 输入:numerator = 1, denominator = 2 输出:“0.5...
  • #include #include #include #include #include #include ...//只要出现循环 则一定会有相同的k  hash[k]=1;  }  printf("0.");  for(int j=0; j; j++)  printf("%d",a[j]);  cout;  } }
  • 如何将无限循环小数转化为分数

    千次阅读 2017-05-15 19:56:27
    无限循环小数也是有理数,而有理数是能表示为两个整数之比的数。如何将无限循环小数转化成分数? 以0.148257148257...0.148257148257...为例。 它的循环部分为:148257148257, 长度为66 , 在等式:x=0....
  • 那么,这里给定一个分数N/D,N为分子,D为分母(N,D均为整数),试编程求出N/D的小数形式,当然如果这个小数为无限循环小数,则把循环的部分用括号括起来,接着循环的部分则省略不写。比如:1/3 =0.(3)22/5=4.41/7 =0...
  • 无限循环小数的循环节长度

    千次阅读 2017-02-25 21:44:50
    新手的代码 ... 将数组分为最长 length/2 部分,一一进行比较判断是否是循环节并求出循环节长度package edu.ecut;public class ArrayTest { public static void main(String[] args) { int length = 1
  • 今天遇到一个2个整数相除后无限循环小数判定的问题,我还在纠结循环节问题的时候。 某大侠给我一个方法顺间把我秒了,思路如下: public static boolean isNonterminating(){ try{ BigDecimal bigA=new ...
  • 如果是无限循环小数就是输出循环个数,比如:结果是0.0000131313…….就输出2,结果是0.571425571425571425…….就输出6。 解题思路: 1.整除很好判断,只要第一次余数是0就可以啦。直接输出结果 2.判断是否能...
  • 2895. 循环小数

    2020-04-05 17:29:16
    给定一个分数,判断其是否是一个无限循环小数,并输出它的第一个循环节。 例如:分数 13 是一个无限循环小数,第一个循环节为 3;而 12 不是一个无限循环小数。 输入格式 不多于 100 行,每行一个 m/n 形式的分数(0...
  • Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢? 请你写一个程序不但可以将普通小数化成最简分数,也可以把循环...
  • 循环小数循环节

    千次阅读 2018-02-07 15:10:47
    任何有理数都可以表示为无限循环小数的形式。   本题目要求即是:给出一个数字的循环小数表示法。   例如: 输入: 1,5 则输出: 0.2   输入: 1,7 则输出: 0.[142857]   输入: 7...
  • 高分悬赏:Java语言输出一个无限循环小数的循环节,例子如下: 输入1/7 输出142857

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,617
精华内容 3,846
关键字:

循环小数是无限小数判断