精华内容
下载资源
问答
  • C语言将循环小数/有限小数转换为分数

    千次阅读 多人点赞 2018-12-24 01:18:19
    早在小学的时候我就对循环小数非常感兴趣,加上初中和高中对循环小数可以说有一定基础研究,因此想到写一个将循环下小数转换为分数的程序,非常有意思,并且对初学者来说,它的输入输出格式的转换也是一大难点。...

    数学基础

    早在小学的时候我就对循环小数非常感兴趣,加上初中和高中对循环小数可以说有一定基础研究,因此想到写一个将循环下小数转换为分数的程序,非常有意思,并且对初学者来说,它的输入输出格式的转换也是一大难点。
    首先必须明确一点,循环小数必定可以转换为分数,原因在于循环小数总可以分解为不循环的有限部分+循环的无限部分。前者对应一个分数,后者可以写成一个收敛的等比数列的和,也必定是可以转换为一个分数的。例如0.234343434…,有限部分为0.2=1/5,无限部分为0.0343434…=0.034/(1-0.01)=34/990=17/495;0.2343434…=1/5+17/495=116/495。同理,0.879879879…=0.879/(1-0.001)=879/999。
    所以任何一个循环小数都可以化为分数,并且通过上述两个例子,我们也对如何转换有了一个初步的了解。

    编程思路

    1. 首先我们得设置一下输入的格式,有限部分和循环部分显然是要分开的,为了方便起见,我在程序里设置的是空格分开。 需要的头文件分别是**<math.h>,<stdio.h>,<stdlib.h>,<string.h>**。
    2. 第二,由于是纯数学运算,来不得半点近似,所有的分数运算我们都需要保留分子和分母,所以保存一个小数的变量是两个整形——分子(num)和分母(den),不妨定义一个分数(Decimal)结构体类型,里面包含整形数据的分子和分母。
    3. 虽然说处理的是整形变量,但是由于我们输入是浮点数,扫描会带来麻烦,所以扫描的时候我还是采用%s的格式一股气扫进去的,根据小数点来个划分。这里还用到了<stdlib.h>当中的itoa和atoi函数,这两个函数可以求出正数的长度。当然,你也可以用<math.h>当中的log10()来求取长度,这两种方法在我的程序中皆有涉及。
    4. 对于分数的处理,显然是要用到化简函数了,化简分数无非就是分子分母同时除以它们的最大公约数,因此需要写一个辗转相除法求最大公约数的程序。分数相加的原理也很简单,先对每个分数化简,再按照手算的方法相加,最后调用化简分数的函数对其化简即可。
    5. 计算有限小数部分的方法和循环小数部分的不同,这一点在第一部分里面已经提到,分别获取有限部分的位长以及循环部分的位长很关键。例如转换一个小数0.2343434…,假设输入0.2 34代表了这个循环小数,用scanf("%s%s",str1,str2)函数输入,那么strlen(str2)就是循环部分的位长。有限部分的位长,比循环部分的计算稍微复杂一些,你可以利用strstr函数舍掉小数点前面的部分,当然,小数点前面的部分不代表就没有用,毕竟我们输入的小数有可能大于1,因此按照如下方法处理即可:
    float f1;
    int integer,dec_length,cir_length;
    f1=atof(str1);
    integer=(int)f1;//整数部分
    dec_length=strlen(strstr(str1,".")+1);//有限小数部分的长度,strstr(str1,".")+1是小数点后的一个数的指针,再取strlen即小数部分的长度
    cir_length=strlen(str2);//循环小数部分长度
    

    这几步非常关键,牵涉到我们的分母到底应该怎么写,如果分母有差错,那之后的化简都是白搭。

    1. 这里需要说明的是,由于我们是按照小数点分隔的,没有考虑到负号的情况,所有本程序暂时只支持输入正的小数,当然即使是负小数,也能很容易通过本程序找到答案。

    代码

    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <stdlib.h> 
    struct Decimal{
    	int num;
    	int den;
    };//定义分数结构体 
    void simplify(int *num,int *den);//化简一个分数的分子和分母
    int GCD(int a,int b);//求两个数的最大公约数 
    int main()
    {
    	char str1[100],str2[100],int1[10];//存放两个分数的字符串,后续再处理  
    	float f1; 
    	int integer,dec1,num,den;//integer是整个小数的整数部分,dec1是有限部分的小数部分(不含小数点的),num和den分别是最终结果分数的分子和分母
    	struct Decimal Dec,Cir;//小数部分对应的分数结构体(有限部分+循环部分) 
    	printf("*******小数转换为分数的实验*********\n");
    	printf("请输入一串小数,如有循环节,请和有限部分用空格隔开,如没有循环节,请用0代替。\n");
    	printf("例如0.2 34代表0.234343434......,3.8753 0代表3.8753\n");//对输入的一个简单说明
    	scanf("%s%s",str1,str2);//这里不能用%f扫入,否则将不知道小数长度 
    	f1=atof(str1);//将输入的字符转换为浮点数 
    	integer=(int)f1;//取整数部分
    	dec1=atoi(strstr(str1,".")+1);
    	itoa(integer,int1,10);//integer转为字符串,方便计算长度 
    	Dec.num=dec1;//有限小数的小数部分(注意是整形的,指的是不含小数点的小数部分)
    	Dec.den=pow(10,strlen(str1)-strlen(int1)-1);
    	Cir.num=atoi(str2);
    	Cir.den=pow(10,strlen(str2))-1;
    	Cir.den*=pow(10,(int)(log10(dec1)+1));
    	if(Cir.num==0)
    	{
    		simplify(&Dec.num,&Dec.den);
    		num=Dec.num+integer*Dec.den;
    		den=Dec.den;
    		simplify(&num,&den);
    		if(integer!=0)printf("转换为带分数的结果为:%d+%d/%d\n",integer,Dec.num,Dec.den);
    		printf("转换为分数的结果为:%d/%d\n",num,den); 
    		return 0;
    	} //如果循环小数是0,直接转换有限部分即可,否则需要将循环部分加以转换,并与有限部分的分数相加 
    	simplify(&Dec.num,&Dec.den);
    	simplify(&Cir.num,&Cir.den);
    	den=Dec.den*Cir.den;
    	num=Dec.num*Cir.den+Dec.den*Cir.num;
    	if(integer!=0)printf("转换为带分数结果为:%d+%d/%d\n",integer,num,den);
    	num+=den*integer;
    	printf("转换为分数结果为:%d/%d\n",num,den); 
    	return 0;
    } 
    int GCD(int a,int b)
    {
    	//利用辗转相除法求两个数的最大公约数 
    	if(a==1||b==1)return 1;
    	int t;
    	if(a<b){t=a;a=b;b=t;}//保证a是大数
    	while(b>0)
    	{
    		t=b;//t临时存放小数
    		b=a%b;//小数是上一次两个数相除的余数
    		a=t;//大数是上一次相除的小数
    	}
    	return a;
    }
    void simplify(int *num,int *den)
    {
    	int gcd=GCD(*num,*den);
    	*num=*num/gcd;
    	*den=*den/gcd;
    }
    
    

    那么好,我们来输入一个循环小数进行验证,如果位数比较多的话,出来的应该是个变态的答案,当然你要相信自己是对的:
    程序执行画面

    下面我们用Win10自带的计算器验证一下(科学模式)
    科学计算器输出结果
    说明我们的结果没问题,大功告成。

    展开全文
  • 从小数点后某一位开始依次不断地重复出现前一个或一节数字的十进制无限小数,叫做循环小数,如2.9666…, (在数学中它读作“二点九六,六循环” ), 定义循环小数的缩写法是将第一个循环节以后的数字全部略去,并将...

    题目描述

    数学课上,楠楠学习了一个新的知识。两数相除,如果得不到整数商,会有两种情况:一种是得到有限小数,另一种是得到无限小数。从小数点后某一位开始依次不断地重复出现前一个或一节数字的十进制无限小数,叫做循环小数,如2.9666…, (在数学中它读作“二点九六,六循环” ), 定义循环小数的缩写法是将第一个循环节以后的数字全部略去,并将第一个循环节首末用括号括起来。例如:
    2.966666… 缩写为 2.9(6)
    35.232323…缩写为 35.(23)
    楠楠发现,根据循环小数的特征,很快能算出这个循环小数中小数点后第n位的数字,你能吗?

    输入

    输入数据有两行。
    第一行,输入一个整数n(n<=100000),表示求小数点后的第n位。
    第二行,一个字符串,用缩写法表示的一个循环小数。

    输出

    输出一个整数,求出循环小数中小数点后第n位的数字。

    样例输入

    10
    352.19(7)

    样例输出

    7

    数据范围限制

    枚举判断题

    #include<bits/stdc++.h>
    using namespace std;
    char c[1005]={},x[1005]={};
    int len1=0,len2=0;
    int main()
    {
    	int n;
    	scanf("%d",&n);
    	char ch=getchar();
    	while(ch!='.')
    	{
    		ch=getchar();
    	}
    	ch=getchar();
    	while(ch!='(')
    	{
    		c[++len1]=ch;
    		ch=getchar();
    	}
    	ch=getchar();
    	while(ch!=')')
    	{
    		x[++len2]=ch;
    		ch=getchar();
    	}
    	if(n<=len1)
    	{
    		putchar(c[n]);
    	}
    	else
    	{
    		n-=len1;
    		n=(n-1)%len2+1;
    		putchar(x[n]);
    	}
    	return 0;
    }
    
    展开全文
  • 从小数点后某一位开始依次不断地重复出现前一个或一节数字的十进制无限小数,叫做循环小数,如2.9666..., (在数学中它读作“二点九六,六循环” ), 定义循环小数的缩写法是将第一个循环节以后的数字全部略去,并将...
  • 对于一个分数(不一定是最简形式),给出它的小树形式,如果小数循环节的话,把循环节放在一对圆括号中. 例如,1/4 =0.25,1/3=0.3333写成0.(3),1/7= 0.142857142857...写成0.(142857)。如果结果是一种整数xxx,则...

    原题链接

    分数化小数

    题目描述

    对于一个分数(不一定是最简形式),给出它的小数形式,如果小数有循环节的话,把循环节放在一对圆括号中.
    例如,1/4 =0.25,1/3=0.3333写成0.(3)1/7= 0.142857142857...写成0.(142857)。如果结果是一种整数xxx,则用xxx.0 等表示整数xxx
    输入包括一行,包括被空格分隔开的分子N和分母D(第一个是N,第二个是D)。
    输出包括一行,为转换后的小数形式。

    输入样例

    45 56

    输出样例

    0.803(571428)

    题目解释

    题目中需要求一个 分数 的小数,如果是无限循环小数,则输出 0.xxx(xxx) 的格式。
    因此我们考虑,先求出这个小数的 循环起始点(S)循环长度(T)

    我们举个栗子。对于 x = 45 56 x = \frac{45}{56} x=5645 这种情况。
    我们考虑先对 x ∗ 10 x * 10 x10 即: 45 56 , 450 56 , 4500 56 , 45000 56 ⋯ \frac{45}{56},\frac{450}{56},\frac{4500}{56},\frac{45000}{56}\cdots 5645,56450,564500,5645000
    然后我们将这些分数的分子进行 m o d   56 mod\ 56 mod 56 操作, 即: 45 56 , 2 56 , 20 56 , 32 56 , 40 56 , 8 56 , 24 56 , 16 56 , 48 56 , 32 56 , 40 56 ⋯ \frac{45}{56},\frac{2}{56},\frac{20}{56},\frac{32}{56},\frac{40}{56},\frac{8}{56},\frac{24}{56},\frac{16}{56},\frac{48}{56},\frac{32}{56},\frac{40}{56}\cdots 5645,562,5620,5632,5640,568,5624,5616,5648,5632,5640
    我们可以明显的发现当操作进行到第 10 次的时候和第 4 次重复了,显然已经形成了一个长度为 6 的循环节,即从第 4 项开始循环。

    由此我们可以推广到更一般的情况。假设分数为 p q \frac{p}{q} qp ,由于小数部分和整数无关,因此我们可以假设这个分数为真分数。不妨假设 p &lt; q p&lt;q p<q

    由上可知,我们可以把第 k + 1 k + 1 k+1 个分数写成 p ∗ 1 0 k   m o d   q q \frac{p*10^k\ mod\ q}{q} qp10k mod q
    因此我们可以假设第 i i i 个分数和第 j j j 个分数相等,即构成了一个循环节。有 p ∗ 1 0 i − 1   m o d   q q = p ∗ 1 0 j − 1   m o d   q q \frac{p*10^{i-1}\ mod\ q}{q} = \frac{p*10^{j -1}\ mod\ q}{q} qp10i1 mod q=qp10j1 mod q
    两边同乘 10 10 10 ,得 p ∗ 1 0 i   m o d   q q = p ∗ 1 0 j   m o d   q q \frac{p*10^i\ mod\ q}{q} = \frac{p*10^j\ mod\ q}{q} qp10i mod q=qp10j mod q
    p ∗ 1 0 j ≡ p ∗ 1 0 i ( m o d   q ) ( i &lt; j ) p * 10^j ≡ p * 10^i (mod \ q) \quad (i &lt; j) p10jp10i(mod q)(i<j)
    又可表示为 p ∗ 1 0 j = p ∗ 1 0 i + q ∗ k p*10^j = p*10^i + q*k p10j=p10i+qk
    g = g c d ( p , q ) g = gcd(p,q) g=gcd(p,q),设 p = p ′ ∗ g , q = q ′ ∗ g p = p&#x27;*g,q=q&#x27;*g p=pg,q=qg。即 p ′ ∗ 1 0 j − p ′ ∗ 1 0 i = q ′ ∗ k p&#x27; *10^j - p&#x27;*10^i=q&#x27;*k p10jp10i=qk
    p ′ ( 1 0 j − 1 0 i ) = q ′ ∗ k   →   p ′ ∗ 1 0 i ( 1 0 j − i − 1 ) = q ′ k p&#x27;(10^j-10^i) = q&#x27;*k \ →\ p&#x27;*10^i(10^{j - i} - 1) = q&#x27;k p(10j10i)=qk  p10i(10ji1)=qk
    由此可知 q ′ ∣ 1 0 i ( 1 0 j − i − 1 ) p ′ q&#x27;|10^i(10^{j - i} - 1)p&#x27; q10i(10ji1)p
    因为 p ′ p&#x27; p q ′ q&#x27; q 互质,因此可得 q ′ ∣ 1 0 i ( 1 0 j − i − 1 ) q&#x27;|10^i(10^{j - i} - 1) q10i(10ji1)
    1 0 i 10^i 10i 为偶数,且和 q ′ q&#x27; q 有公因数。
    ( 1 0 j − i − 1 ) (10^{j - i} - 1) (10ji1) 为奇数,显然不可能存在和 q ′ q&#x27; q 的公因数,因此 q ′ q&#x27; q ( 1 0 j − i − 1 ) (10^{j - i} - 1) (10ji1) 互质。
    显然 i i i 1 0 i 10^i 10i q ′ q&#x27; q 共同决定,又知 1 0 i 10^i 10i q ′ q&#x27; q 的公因数由 2 2 2 5 5 5 贡献。
    因此 i = m a x ( n , m ) i = max(n,m) i=max(n,m) n n n q ′ q&#x27; q中贡献的 2 2 2 的个数, m m m q ′ q&#x27; q中贡献的 5 5 5 的个数。

    接下来需要求循环节 T = j − i T = j - i T=ji

    q ′ ′ = q ′ 2 n ∗ 5 m q&#x27;&#x27; = \frac{q&#x27;}{2^n*5^m} q=2n5mq
    经过一番计算,上式 q ′ ∣ 1 0 i ( 1 0 j − i − 1 ) q&#x27;|10^i(10^{j - i} - 1) q10i(10ji1) 已经变成了 q ′ ∣ 2 n 5 m ( 1 0 j − i − 1 ) ∗ 1 0 i 2 n 5 m q&#x27;|2^n5^m(10^{j - i} - 1)*\frac{10^i}{2^n5^m} q2n5m(10ji1)2n5m10i
    q ′ ′ ∣ ( 1 0 j − i − 1 ) ∗ 1 0 i 2 n 5 m q&#x27;&#x27;|(10^{j - i} - 1)*\frac{10^i}{2^n5^m} q(10ji1)2n5m10i
    又知 q ′ ′ q&#x27;&#x27; q 1 0 i 2 n 5 m \frac{10^i}{2^n5^m} 2n5m10i 互质,且由上文可知 q ′ q&#x27; q ( 1 0 j − i − 1 ) (10^{j - i} - 1) (10ji1) 互质可知 q ′ q&#x27; q ( 1 0 j − i − 1 ) (10^{j - i} - 1) (10ji1) 也互质。
    只需要解出 j − i j -i ji 就是我们无限循环小数中的循环节了。即
    1 0 j − i ≡ 1   ( m o d   q ′ ′ ) 10^{j - i}≡1\ (mod\ q&#x27;&#x27;) 10ji1 (mod q)
    不妨假设 x = j − i x = j - i x=ji,即解 1 0 x ≡ 1   ( m o d   q ′ ′ ) 10^x≡1\ (mod\ q&#x27;&#x27;) 10x1 (mod q)
    由欧拉定理可知,存在最小的 1 0 x ≡ 1   ( m o d   q ′ ′ ) 10^x≡1\ (mod\ q&#x27;&#x27;) 10x1 (mod q) ,当 x x x φ ( q ′ ′ ) \varphi(q&#x27;&#x27;) φ(q) 的一个因子。
    因此我们只需要去枚举所有 φ ( q ′ ′ ) \varphi(q&#x27;&#x27;) φ(q) 的因子,从而找到一个最小的 x x x,使得 1 0 x ≡ 1   ( m o d   q ′ ′ ) 10^x≡1\ (mod\ q&#x27;&#x27;) 10x1 (mod q)

    此时解出的 i i i 就是循环节开始的前一位, x x x j − i j - i ji 为循环节的长度。
    接下来的任务只需要模拟乘法,按照题目要求输出即可。

    但是非常悲伤的事情是,队友暴力模拟 A 了。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    LL p, q, S, T, Z;
    
    LL Euler(LL x) {
      LL ans = x;
      for (LL i = 2; i * i <= x; i++) {
        if (x % i == 0) {
          ans = (ans/i) * (i - 1);
          while (x % i == 0) x /= i;
        }
      }
      if (x > 1) ans = (ans/x) * (x - 1);
      return ans;
    }
    
    LL power(LL a, LL x, LL mod) {
      LL ans = 1;
      while (x) {
        if (x & 1) ans = (ans * a)%mod;
        a = (a * a)%mod;
        x >>= 1;
      }
      return ans;
    }
    
    LL gcd(LL a, LL b) {
      return b == 0? a:gcd(b, a%b);
    }
    
    LL get_first(LL &x) {
      LL ans1 = 0, ans2 = 0;
      while (x % 2 == 0) {
        x /= 2;
        ans1++;
      }
      while (x % 5 == 0) {
        x /= 5;
        ans2++;
      }
      return max(ans1, ans2);
    }
    
    LL get_T(LL x, LL mod) {
      LL Min = 1e18;
      for (LL i = 1; i * i <= x; i++) {
        if (x % i == 0) {
          if (power(10, i, mod) == 1) {Min = min(Min, i); break;}
          if (power(10, x/i, mod) == 1) Min = min(Min, x/i);
        }
      }
      return Min;
    }
    
    void print(LL p, LL q, LL S, LL T) {
      printf("%lld.", p/q);
      p -= q * (p/q);
      for (int i = 0; i < S + T; i++) {
        if (i == S) printf("(");
        p *= 10;
        printf("%lld", p/q);
        p -= q * (p/q);
        if (p == 0) break;
        if (i == S + T - 1) printf(")");
      }
      printf("\n");
    }
    
    int main()
    {
      while (scanf("%lld %lld", &p, &q) != EOF) {
        LL a = p, b = q;
        LL g = gcd(p, q);
        p /= g, q /= g;
    
        S = get_first(q);
        LL phi = Euler(q);
        T = get_T(phi, q);
        
        if (T == 1e18) S = T;
        print(a, b, S, T);
      }
    
      return 0;
    }
    
    
    展开全文
  • 今天带学生做练习,遇到一个循环小数的问题:题目:0.0909090…的循环节是( )。A.09 B.90 C.090 D.9090不少学生选择B项90,习题答案也给了B项,我思考了下,纠正为A项。这个地方有些别扭,不好解释,也没那么重要,...

    0fb036e39f6fdb71d0d58f15b59310d2.png

    今天带学生做练习,遇到一个循环小数的问题:

    题目:0.0909090…的循环节是(  )。

    A.09       B.90       C.090      D.9090

    不少学生选择B项90,习题答案也给了B项,我思考了下,纠正为A项。

    这个地方有些别扭,不好解释,也没那么重要,所以当时只做了纠正,没有仔细讲解。孰料晚上刘雨菲在家订正此题,探索了一番,似乎网上主流答案跟我说的不一样,于是发信息请我再次确认一下。刘雨菲是个好孩子,积极乐观,好学善思,有领导力,前程远大,她既然问了,我当慎重对待,因作此文。

    0.0909090…,看到这样一个循环小数,我们的着眼点先是在“…”符号上,然后顺着符号向前看,看到了“90”在交替出现,于是下意识地以为“90”就是小数的循环节。这是产生错漏的主要原因——思维倾向型错漏。比如,一学生初学某生字,默写时写错了,瞄了一眼同桌,嗨!奇了怪了,竟然错得一模一样。再看看前后左右,吆——大家一个老师教的呀!其实不是老师教错了,而是这个生字,结构有悖常识,也可以说跟我们的常规思维倾向相悖,若是不特意提点,多数人都会这么错。

    循环节的这个地方,就是如此。别说学生了,不少老师理解得都不对,进而教错。我说自己对了,有着多方面的论证辨析,你且听我道来,看看是否有道理。

    首先,我们来看循环小数和循环节的定义:

    一个小数的小数部分,从某一位起,一个数字或者几个数字依次不断重复出现,这样的小数叫做循环小数。

    一个循环小数的小数部分,依次不断重复出现的数字,就是这个循环小数的循环节。

    (注:以上两个定义,专门翻书部编版五年级上册数学课本)

    我们来看定义中的“从某一位起”四个字,“0.0909090…”这个小数的小数部分,从哪一位起,开始依次不断重复的?无可置疑,十分位!最先重复的是“0”,从十分位上的“0”开始,依次不断重复“09”这个数字。因此,我说“09”是这个循环小数0.0909090…的循环节。

    其次,从循环小数的细分定义,也可证明这一点。

    循环小数又可分为纯循环小数和混循环小数。

    从小数部分第一位开始的循环小数,称为纯循环小数,如0.333…,0.4545…,0.925925…等。

    十分位后开始循环的小数,称为混循环小数,如0.1666…,0.010909…,0.00909…等。

    以上两个定义,我们可以换一种说法:从十分位开始算循环节的小数,是纯循环小数,从十分位后开始循环的小数,是混循环小数。

    请您来说,0.0909090…这个小数,是不是纯循环小数?当然是,从第一位小数就开始循环了。既然是纯循环小说,那么循环节就可以说是“09”。

    再次,从转化分数的角度来看,也可证明。纯循环小数化作分数的方法非常简单:循环节做分子,连写几个9作分母,循环节有几位写几个九(注:转化原理用文字语言来说比较绕,在此暂且不谈)。例:——循环节的位数有一个,所以写一个9;

    ——3位循环节写3个9。

    不管是“09”还是“90”,都是两位。以“09”来说,0.0909090…等于九十九分之九,也就是十一分之一。按一下计算器,1除以11正是0.0909090…这个循环小数。若是“90”呢,九十九分之九十吗?那就等于十一分之十了,似乎错了,与原小数不相等了。

    当然了,其实以“90”为循环节,实际上是把0.0909090…当作了混循环小数,需要其他更加复杂的方法转化,转化出来的分数,也还是十一分之一。然而那却把简单问题复杂化了,不符合数学的最简便定律。

    从这个角度上来看,“09”还是比“90”更加正宗。

    最后,从循环小数的简便形式上来说,还得是“09”。简单来说,以简便形式写作0.0909090…为零点零九,零和九顶上点两个点。假如写作零点零九零,九和零的上面点点,那也太不简便,绝对就是错误了。这么一看,循环节还是“09”,也只能是“09”。

    综上所述,我想0.0909090…的循环节是“09”这个问题已经很清楚了。之所以不少人将它的循环节错认为“90”,是因为原小数的表示“不明确”,它写了3.5个循环节(为什么循环节一定要写整数个,这是一种误解,换个长一点的,说不定还有2.78个、3.615个呢),容易让人识别为混循环小数,进而把“90”当作它的循环节。

    文章的末尾,出个很有意思的“脑筋转不过弯”,让您愣怔一下,它跟芝诺的“永远追不乌龟”(阿基里斯悖论)有关,烧烧你的脑,也显显我很有文化,这个弯是这样的:

    一个蛋糕分三块,每块三分之一,三分之一换算成循环小数就是0.333…。也就是说,每块蛋糕0.333…,三块蛋糕,就是乘以三,得到0.999…

    ——哎呀,怎么回事?0.999…个蛋糕,不等于一个蛋糕吧?怎么就不够一个蛋糕了呢?懵了吧,剩下那一点点点点点……哪里去了?

    展开全文
  • #include using namespace std; int main() { int num,m,i=0,t1,t2,a[10]; cout输入除数与被除数"; cin>>num>>m;... cout从小数点后第"位开始循环"; return 0; } } i++; } return 0; }
  • =3000),输出a/b的循环小数表示以及循环节长度。例如a=5,b=43,小数表示为0.(116279069767441860465),循环节长度为21. 解题思路: 计算a/b的小数: 题目要求循环小数,简单的a/b运算必然无法正常得到答案,采用...
  • 把无限循环小数化为分数

    千次阅读 2013-04-24 09:59:59
    把无限循环小数化为分数 给定一个无限循环小数,我们是否能把它化为分数呢?其实方法也很简单,其关键在于利用「无限循环」这一点。例如,给定小数0.272727...,如何把它化为分数呢?我们可以先把它写成 1 x 0....
  • javaScript学习笔记(一)js基础

    万次阅读 多人点赞 2018-09-21 10:07:18
    未定义型:undefined 对比java中的数据类型: 整数:byte short int long 小数:float double 字符:char 布尔:boolean 字符串:String 8、变量: 8.1、定义:就是存放数据的、内疗可以存储任意数据 8.2、声明变量...
  • 一、循环之for循环1.1 for循环的语法与基本使用什么是for循环?为何要有for循环?如何使用for循环循环就是重复做某件事,for循环是python提供的第二种循环;一般for循环能做的,while循环都能做,之所以有for循环...
  • C语言

    万次阅读 多人点赞 2019-12-18 23:01:50
    129.continue语句的作用是结束本次循环(而不是终止整个循环) 130.C数组中的每一个元素都必须属于同一个数据类型 131.C数组必须先定义,然后使用 132.C语言规定只能逐个引用数组元素而不能一次引用整个数组 133....
  • %d = %02d " %(i, j, i*j)) print(s) 三:enumerate()函数和下标元素循环示例 Python语言中的for循环直接迭代对象集合中的元素,如果需要在循环中使用索引下标访问集合元素,则可以使用内置的enumerate()函数 ...
  • Fibonacci数列 斐波那契数列

    千次阅读 2019-11-21 17:51:57
    对于这部分,我们要想到对于结果的处理不能放到最后,因为int的最大值一定比F1,000,000要小数组100%会炸 Boom! 所以我们要在运算时就对每一次的结果进行处理。 7%4=3 3%4=3 可知在运算时我们对斐波那契...
  • 相关保留字是:for…in和while,def用于定义函数 编程测试: turtle八边形绘制 :使用turtle库,绘制一个八边形 import turtle as t t . pensize ( 2 ) for i in range ( 8 ) : t . fd ( 100...
  • 测试开发笔记

    万次阅读 多人点赞 2019-11-14 17:11:58
    49 第六章 C语言 49 C语言中的存储 50 数据类型 50 常量 53 结构体 54 条件/分支逻辑 54 Switch 54 If 55 循环 55 For 55 while 56 do…while 56 函数 56 第七章 Windows环境搭建 59 一、名词注解与定义: 59 C/S ...
  • 2.let是块级作用域,函数内部使用let定义后,对函数外部无影响 3.const定义的变量初始化以后不可以修改--->类似于java常量 4.没有任何关键字声明的变量--->全局变量 全局函数:所有js对象都可以使用 parseInt...
  • MATLAB教程(1) MATLAB 基础知识

    万次阅读 多人点赞 2017-10-26 20:57:32
    这里要注意的是,p不是一个整数值矩阵,MATLAB存储数字是以浮点型存储的,真实值和它的浮点数在运算时有小小的不同,我们可以使用格式化命令,显示更多的小数位数。 比如: format long p = a*inv(a) ...
  • PTA46题(Java基础练习)

    万次阅读 多人点赞 2019-10-03 20:40:59
    定义一个枚举类型Grade来表示考试的4个等级,值包含A,B,C,D,E 编写一个函数Grade getGrade(int score)将传递进来的score转化为枚举类型 score>=90 and 返回A, score>=80 and 返回B, score>=70 and 返回C, ...
  • 前端面试题

    万次阅读 多人点赞 2019-08-08 11:49:01
    定义了一个变量,但没有为该变量赋值,如果alert该变量,javascript弹出的对话框中显示___undefined______ 。 68 分析代码,得出正确的结果。 68 写出函数DateDemo的返回结果,系统时间假定为今天 68 写出程序...
  • //两成绩总和for循环相加 } printf("total=%.2f\n",0.3*n+0.7*m); printf("average=%.2f\n",(n/5.0)*0.3+(m/5.0)*0.7); printf("average=%d\n",(m+n)/10); return 0; } 3 存款利率计算器V1.0(3分) 题目内容: 设...
  • 详解DHT11温湿度传感器的原理及驱动程序

    万次阅读 多人点赞 2019-11-22 00:29:45
    2.引脚定义 3.典型电路 DHT11的供电电压为 3-5.5V,电源引脚(VDD,GND)之间可增加一个100nF 的电容,用以去耦滤波。DATA引脚并联一个5K以上的上拉电阻,增强信号的抗干扰额能力。传感器上电后,要等待 1s 以...
  • 上述数列前n项的和,保留15位小数 样例输入 200 样例输出 98.683296008649080 然后是递归代码: #include double tg(double d); int main() { double n; scanf("%lf",&n); printf("%.15f\n",tg(n));...
  •  此题的关键是怎么判断商循环小数以及得到其循环部分。其实就是一个很简单的数学知识,如果两数相除,出现了两次相同的余数,则循环发生。 C#代码如下,其原理就是余数乘10再除以除数,若出现两次相同的余数,则可...
  • C#基础教程-c#实例教程,适合初学者

    万次阅读 多人点赞 2016-08-22 11:13:24
    大家注意,这里我们实际定义了一个新的数据类型,为用户自己定义的数据类型,是对个人的特性和行为的描述,他的类型名为Person,和int,char等一样为一种数据类型。用定义新数据类型Person类的方法把数据和处理数据...
  • 浮点数

    千次阅读 2017-06-20 16:42:01
    如果在计算中出现了循环小数或是已经为0的情况,二进制小数计算可以提前停止。 注意到,在整个转换浮点数的第一步已经判断了浮点数的范围,无需考虑十分小的小数无法表示,而近似为0的情况。 通过上述操作,...
  • JAVA 基础

    千次阅读 多人点赞 2016-11-04 10:33:04
     Java是强类型语言,所有的变量必须先声明后使用,定义变量需要显示的声明一个在编译时就能确定的类型。  Java中的数据类型有两种,基本类型(Primitive Type)和引用类型(Reference Type)。  1)基本数据...
  • 把无限循环小数化为分数给定一个无限循环小数,我们是否能把它化为分数呢?其实方法也很简单,其关键在于利用「无限循环」这一点。例如,给定小数0.272727...,如何把它化为分数呢?我们可以先把它写成 1 x 0.272727...
  • 词法分析器实现过程(java和c++实现)

    千次阅读 多人点赞 2019-01-19 09:59:46
    (5)常量(NUM):整数、小数、浮点数。 (6)词法分析阶段通常忽略空格、制表符和换行符等。 根据以上的分类与分析,设置该语言中的单词符号及种别编码如下表: 六、状态图分析 1.关键字 本次设计中...
  • 我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。 如果我们把有限小数的末尾加上无限多个0,它们就有了统一的形式。 本题的任务是:在上面的约定下,求整数除法小数点后的第n位开始的3位数。 输入...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,579
精华内容 26,631
关键字:

循环小数的定义