精华内容
下载资源
问答
  • JAVA获取无限循环小数循环节

    算法思路

    • 定理:一个分母为N的循环小数的循环节位数最多不超过N-1位
    • 若A/B为无限循环小数的话,则在出现循环节之前,每次长除法的余数都不相同

    代码

    /**
    * @param a 分子
    * @param b 分母
    * @return  返回代表循环节的字符串
    */
    static String getRepetend(int a,int b){
    	String decimal ="";
    	List<Integer> temp = new LinkedList<Integer>();
    	a = a%b;
    	loop:
    	while(a!=0){
    		if(!temp.contains(a))	temp.add(a);
    		else
    			for(int i=0;i<temp.size();i++)
    				if(temp.get(i)==a) {
    					decimal = decimal.substring(i,decimal.length());
    					break loop;
    				}
    		decimal += a*10/b;
    		a = (a*10)%b;
    	}
    	return decimal;
    }
    

    算法例子

    参考:https://programtip.com/zh/art-111488
    给定分子a,分母b,若a除以b为无限循环小数,则输出格式为整数部分.小数部分[循环节],例如1.03333333输出格式为1.0[3],若是有限小数,则输出不带后缀零的结果,例如1.25输出格式为1.25
    代码

    import java.util.LinkedList;
    import java.util.List;
    public class test {
    	
    	static String getResult(int a,int b){
    		if(a%b==0)	return String.valueOf(a/b);
    		String decimal ="";
    		List<Integer> temp = new LinkedList<Integer>();
    		a = a%b;
    		loop:
    		while(a!=0){
    			if(!temp.contains(a))	temp.add(a);
    			else
    				for(int i=0;i<temp.size();i++)
    					if(temp.get(i)==a) {
    						decimal = decimal.substring(0,i)+"["+decimal.substring(i,decimal.length())+"]";
    						break loop;
    					}
    			decimal += a*10/b;
    			a = (a*10)%b;
    		}
    		return String.valueOf(a/b)+"."+decimal;
    	}
    	
    	public static void main(String[] args) {
    		for(int i=1; i<=20; i++)
    			System.out.println(getResult(1,i));
    	}
    }
    

    结果

    1
    0.5
    0.[3]
    0.25
    0.2
    0.1[6]
    0.[142857]
    0.125
    0.[1]
    0.1
    0.[09]
    0.08[3]
    0.[076923]
    0.0[714285]
    0.0[6]
    0.0625
    0.[0588235294117647]
    0.0[5]
    0.[052631578947368421]
    0.05
    
    展开全文
  • python再计算无限循环小数循环节

    千次阅读 2017-05-01 23:02:00
    如果无限小数的小数点后,从某一位起向右进行到某一位止的一节数字循环出现,首尾衔接,称这种小数为循环小数,这一节数字称为循环节。 #寻找1000以内的n,使得1/n的循环小数节长度最长#问题化简,首先不是素数的...

    循环节:
    如果无限小数的小数点后,从某一位起向右进行到某一位止的一节数字循环出现,首尾衔接,称这种小数为循环小数,这一节数字称为循环节。
    #寻找1000以内的n,使得1/n的循环小数节长度最长

    #问题化简,首先不是素数的数的循环节长度必定可以由其他数组成比如14可以由2*7组成,
    #那么1/14与1/7有相同的循环节长度,所以只需找出所有的素数不(包括2与5),求的他们的循环节长度。
    #判断一个1/n是否为循环小数。
    def zhi(n):
        if n==2 or n==5:
            return True
        if n%2==0:
            return zhi(n//2)
        if n%5==0:
            return zhi(n//5)
        return False
       #判断一个数n是否为素数
    def is_prime(n):
        if n == 1:
            return False
        for i in range(2, int(sqrt(n))+1):
            if n % i == 0:
                return 

    前提是所有的数必须是质数(即素数)循环节的长度是使分母P整除10^k-1的最小k值。例如:9可以整除10^1-1,所以当分母为9时,循环节是1位。7可以整除10^6-1=999999,所以当分母为7时,循环节是6位。

    #判断1/n的小数循环节点长度
     Length(n):
        L=1
        while(True):
            if (10**L-1)%n==0:
                break
            L+=1
        return L
    a=[]
    for i in range(2,101):
        if is_prime(i) and i!=2 and i!=5:#素数包括25
            a.append([Length(i),i])
    print(a)
    ##[[1, 3], [6, 7], [2, 11], [6, 13], [16, 17], [18, 19], [22, 23], [28, 29], [15, 31], [3, 37], [5, 41], [21, 43], [46, 47], [13, 53], [58, 59], [60, 61], [33, 67], [35, 71], [8, 73], [13, 79], [41, 83], [44, 89], [96, 97]]

    第一次知道利用上面的算法来求循环节,真是长见识了。继续努力。

    展开全文
  •  输入整数a和b,输出a/b的循环小数表示以及其循环节长度。例如 a=5 b=43 小数表示为0.(116279069767441860465),循环节长度为21; 分析:  长除法的计算过程  ①mod = a%b;  ②小数 = (mod*10) /...

    问题:

      输入整数a和b,输出a/b的循环小数表示以及其循环节长度。例如 a=5 b=43 小数表示为0.(116279069767441860465),循环节长度为21;

     

    分析: 

      长除法的计算过程

     

        ①mod = a%b;

     

        ②小数 = (mod*10) / b;

     

        ③mod = (mod*10)%b;

     

      循环②③步,当出现重复的余数的时候,也就是循环节出现了

    注意事项:

      当循环上述2、3步骤时,出现余数为零的情况,即计算结果不是循环小数时,直接输出索引值,循环节长度为0。

     

    C++实现:

     1 #include<iostream>
     2 using namespace std;
     3 
     4 int main() {
     5     int a, b, t, k;
     6     cin >> a >> b;
     7     int index = 0;
     8     t = a%b;
     9     if (t ==0) {
    10         cout << index << " " << index << endl;
    11         return 0;
    12     }
    13     int flag[10000] = {0};
    14     memset(flag,-1,1000);
    15     k =0;
    16     int length = 0;
    17     while (true) {
    18         t = (t*10)%b;
    19         if (t == 0) {
    20             index = ++k;
    21             length = 0;
    22             break;
    23         }
    24 
    25         if(flag[t] >= 0) {
    26             index = flag[t];
    27             length = k - index;
    28             break;
    29         }
    30         flag[t]=k;
    31         k++;
    32     }
    33 
    34     cout << index << " " << length << endl;
    35     return 0;
    36 }

     

     

        

    转载于:https://www.cnblogs.com/TonvyLeeBlogs/p/9563915.html

    展开全文
  • 思路:分数不能表示无限不循环小数。建立3个数组,一个放商,一个放余数,一个对应下角标的数若是余数则元素为1,即记录余数存在。循环除数加一次,若余数为0,则循环节长度为1,若当前得到的余数已经存在,则有循环...

    输入整数a和b(0<=a<=3000,1<=b<=3000),输出a/b的循环小数表示以及循环节长度。例如a=5,b=43,小数表示为

    0.(116279069767441860465),循环节长度为21;  

    思路:分数不能表示无限不循环小数。建立3个数组,一个放商,一个放余数,一个对应下角标的数若是余数则元素为1,即记录余数存在。循环除数加一次,若余数为0,则循环节长度为1,若当前得到的余数已经存在,则有循环节,求出2个相同余数的距离即为循环节长度。

      这个主要是怎么寻找循环节,在除法计算的过程中如何判断一个循环节已经出现了。循环节第二次出现意味着计算过程中的余数已经第二次出现。其实自己在草纸上写一个比如5/7就能发现。当商5的时候(5是循环节的最后一位)余数是5,这和第一次商0的时候(0是循环节前一位)余数也是五。然后用索引存储是否这个余数已经出现过,还有一个数组记录余数对应的商的位置。余数的范围是1~m-1,所以循环节最长是m-1,所以查询数组的大小根据m的值来设定


    1. #include <iostream>  
    2. #include <cstdlib>  
    3. #include <cstring>  
    4. #include <cstdio>  
    5.   
    6. using namespace std;  
    7.   
    8. int r[3003],u[3003],s[3003];  
    9.   
    10. int main()  
    11. {  
    12.     int n,m,t;  
    13.     while (cin >> n >> m) {  
    14.         t = n;  
    15.         memset(r, 0, sizeof(r));  
    16.         memset(u, 0, sizeof(u));  
    17.         int count = 0;  
    18.         r[count ++] = n/m;  
    19.         n = n%m;  
    20.         while (!u[n] && n) {  
    21.             u[n] = count;  
    22.             s[count] = n;  
    23.             r[count ++] = 10*n/m;  
    24.             n = 10*n%m;  
    25.         }  
    26.         printf("%d/%d = %d",t,m,r[0]);  
    27.         printf(".");  
    28.         for (int i = 1 ; i < count && i <= 50 ; ++ i) {  
    29.             if (n && s[i] == n) printf("(");  
    30.             printf("%d",r[i]);  
    31.         }  
    32.         if (!n) printf("(0");  
    33.         if (count > 50) printf("...");  
    34.         printf(")\n");  
    35.         printf("   %d = number of digits in repeating cycle\n\n",!n?1:count-u[n]);  
    36.     }  
    37.     return 0;  
    38. }  

    展开全文
  • 无限循环小数循环节

    千次阅读 2014-07-13 22:03:05
    输入两个数M,N(均小于100),M/N可能为有限小数,也可能...如果M/N为有限小数,则输出其所有的小数位,如果M/N为无限循环小数,则输出它小数点后面的一个循环节 例如 输入 1 4 输出 25 输入 2 7 输出 285714
  • 循环小数循环节

    千次阅读 2018-02-07 15:10:47
    任何有理数都可以表示为无限循环小数的形式。   本题目要求即是:给出一个数字的循环小数表示法。   例如: 输入: 1,5 则输出: 0.2   输入: 1,7 则输出: 0.[142857]   输入: 7...
  • 一.引入 偶然在网上看见的,手痒了,就试了试,哈哈。。。。。。。做出来了,实际就是模拟。... 下面的来自维基百科:循环小数是从小数部分的某一位起... 定理:一个分母为N的循环小数循环节位数最多不超过N-1位。 ...
  • 即给定一个数n,输出1/n的结果,若是循环小数,则只输出第一个循环节。例如:输入 n 3 输出 0.3 直接上代码讲解: #include <algorithm> #include <iostream> using namespace std; int a[100005];//此...
  • 循环小数循环节问题

    千次阅读 2016-11-10 15:25:17
    那么小数就开始循环了,循环节的始末位置 与这个余数出现在竖式中的位置有关 这里就不详细给出分析过程了,网上可以找到 详细的解题过程 */ #include #include const int maxn = 3010; //数组d用来存放商,数组m...
  • =3000,输出n/m的循环小数表示以及循环节长度。 思路: 设立一个r[]数组记录循环小数,u[]记录每次的count,用于标记,小数计算可用 r[i]=n*10/m;n=n*10%10 直到n为0或u[n]!=0(找到循环节) 涉及到两个知识点:...
  • 试题 历届试题 小数第n位 循环小数循环节 时间限制:1.0s 内存限制:256.0MB 问题描述  我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。  如果我们把有限小数的末尾加上无限多个0,它们就有...
  • 求无限循环小数循环节长度

    千次阅读 2017-02-25 21:44:50
    新手的代码 ... 将数组分为最长 length/2 部分,一一进行比较判断是否是循环节并求出循环节长度package edu.ecut;public class ArrayTest { public static void main(String[] args) { int length = 1
  • 高分悬赏:Java语言输出一个无限循环小数循环节,例子如下: 输入1/7 输出142857
  •  我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。  如果我们把有限小数的末尾加上无限多个0,它们就有了统一的形式。  本题的任务是:在上面的约定下,求整数除法小数点后的第n位开始的...
  • 对于一个分数(不一定是最简形式),给出它的小树形式,如果小数循环节的话,把循环节放在一对圆括号中. 例如,1/4 =0.25,1/3=0.3333写成0.(3),1/7= 0.142857142857...写成0.(142857)。如果结果是一种整数xxx,...
  • 循环小数表示

    2019-10-04 01:15:59
    任何有理数都可以表示为无限循环小数的形式。 本题目要求即是:给出一个数字的循环小数表示法。 这段时间个人几篇文章介绍了改整数输入的文章. 关联文章的地址 /* 有理环循小数 1/7 = 0.142857142... 是个...
  • 两个整数相除得到循环小数,求循环节 例如: 1/7 = 0.142857142857142857… 循环节是142857 思路: 除法运算时,两个数相除得到整数和余数,然后把余数乘以10,再除以除数得到下一位,以此类推: 当得到的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,908
精华内容 4,763
关键字:

循环小数循环节表示