精华内容
下载资源
问答
  • 循环小数

    2021-01-27 16:22:21
    定义一个循环小数缩写为整数部分+小数点+非循环节部分+(循环节部分)。 例如: 2.96666666… 缩写为2.9(6) 35.223232323…缩写为35.2(23) 你能输出一个循环小数中小数点后第n位的数字吗? 输入格式 第一行,...

    传送门已损坏

    题目描述

    定义一个循环小数缩写为整数部分+小数点+非循环节部分+(循环节部分)。
    例如:
    2.96666666… 缩写为2.9(6)
    35.223232323…缩写为35.2(23)
    你能输出一个循环小数中小数点后第n位的数字吗?

    输入格式

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

    输出格式

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

    输入样例(1)

    10
    352.19(7)
    

    输出样例(1)

    7
    

    输入样例(2)

    5
    7328.(192)
    

    输出样例(2)

    9
    

    主要思路

    这是一道简单的模拟题。如果遇到小数点,就开第一个锁。如果遇到一个左括号,就关第一个锁,开第二个锁,然后记录。如果遇到一个右括号,就关第二个锁,开第二个锁,然后记录。

    ——————AC代码

    #include<bits/stdc++.h>
    using namespace std;
    int n,p,k;
    string s,q,h;//q为非循环节部分,h为循环节部分
    int main(){
    	cin>>n;
    	cin>>s;
    	for(int i=0;i<s.size();i++){
    	    if(k){
    			if(s[i]==')')k=0;
    			else h+=s[i];
    		}
    	    if(p){
    	    	if(s[i]=='(')p=0,k=1;
    	    	else q+=s[i];
    		}
    		if(s[i]=='.')p=1;
    	}
    	if(n<=q.size())cout<<q[n-1];
    	else cout<<h[(n-q.size()-1)%h.size()];
    	//cout<<endl<<s<<endl<<q<<endl<<h;
    	return 0;
    } 
    

    ——————————QAQ

    展开全文
  • 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..., (在数学中它读作“二点九六,六循环” ), 定义循环小数的缩写法是将第一个循环节以后的数字全部略去,并将...
  • 电子课本图文讲解同步练习参考答案导学案教学设计教学内容循环小数。(教材第33页)教学目标1.使学生初步认识循环小数、有限小数和无限小数,掌握循环小数的简便记法。2.让学生经历猜想、验证的探究过程,培养学生的探究...

    1bcc1587744a77e2f4b995792fbdaf2f.gif

    87ba12c627aeea8e76aeaf18de10ec86.png

    电子课本

    f95432a4af82b32307f1b41986e92ebf.png

    图文讲解

    75bd8c98c21018e779d2a9ad0fd34768.png

    fff9386fad9a16c055b3b9443a151f0b.png

    08464bb1976d40430e338e761da53010.png

    5c7f3d1beb8dc611505f73863236af3b.png

    99a1b47e285788098b00254ca6f20563.png

    7724a81bf9c046a15f83403e601a6461.png

    a58310ab02685957c553b0169c8a7ebb.png

    2a3322e980f0b110266543d19f54cf9d.png

    4ae7dbe03d493e9e34775e7180bffd50.png

    9aed10aa7d627a34a0d20223486663b1.png

    a8e8bf3256ab052cf6ca7cdf686fd90a.png

    5d1d755e75f38fe66c47b7161ad2b9e5.png

    73fbb3d56ab7b6be2f29bf759d3b321c.png

    124d48d8ae429ece4f3a927dc32ebbb5.png

    52dd9491e32fa51ceb8e2104b5de3800.png

    a0da24fef888026cd2180128258df68d.png

    同步练习

    c2eacf7958d630b3a20b3096248ca863.png

    参考答案

    3a9813724811c40045b7fcb548c701ce.png

    导学案

    a474ad670e695e3f2721e58791dd2499.png

    e52f88e9d4d15942341a71f5fdc2d048.png

    教学设计

    教学内容

    循环小数。(教材第33页)

    教学目标

    1.使学生初步认识循环小数、有限小数和无限小数,掌握循环小数的简便记法。

    2.让学生经历猜想、验证的探究过程,培养学生的探究精神。

    3.学生能在学习过程中获得成功体验,培养学生积极的数学情感。

    重点难点

    重点:理解无限循环小数的意义。

    难点:循环节的判断方法。

    教具学具

    投影片,扑克牌。

    教学过程

    一  导入

    做游戏,找规律。

    31453386104ebd6ec2dd5388ed8f22c4.png

    再往后摆,你知道怎么摆吗?为什么?

    (因为它们是按Q、J、K的顺序依次不断重复出现)

    师:从这道题中可以看出,有依次不断重复出现的图案,我们把它叫做“循环”,这节课让我们共同走进数学王国的乐园,探究“循环小数”的秘密吧!(板书课题:循环小数)

    二  教学实施

    1.主动探索。

    (1)教师出示算式:42.135÷5400÷7578.6÷11

    学生在练习本上做题。

    021349782b49b387bc10ab7bff82471b.png

    教师给学生充分的时间,让学生做完题后,去体会“无限”与“有限”,“循环”与“不循环”的数学现象。

    (2)学生观察思考。

    在计算和观察同学计算过程中,你发现了什么奇怪的现象?

    学生交流讨论。

    第一题可以除尽,第二题、第三题的商除不尽,总也除不完。

    (3)提问。

    如果第二题、第三题继续往下除,商会出现什么情况呢?(第二题还继续商3、3、3……第三题还是先商4,再商5……)继续除下去商一定重复,你是从哪儿看出来的?(因为余数重复出现,商必然重复出现)继续第二题、第三题的计算,要分别商多少个3,多少个4、5呢?(要商无数个)

    2.建立有限小数和无限小数的概念。

    讨论:第一题与第二题、第三题的商有什么不同?

    第二与第三题的商又有什么不同?

    引导学生发现,第一题可以除尽,它的商的位数是有限的,第二、第三题都除不尽,它们的商的位数是无限的。

    第二、第三题中商的数字虽然都出现了循环、重复,但第二题的商是一个数字循环,第三题的商则是两个数字循环。

    我们把小数部分位数是有限的小数叫做有限小数。

    我们把小数部分位数是无限的小数叫做无限小数。

    3.初步认识循环小数。

    教师指着400÷75的竖式提问。

    72b798aff4c2b24f367fa66f9b472db5.png

    师:为什么商的小数部分总是重复出现“3”,它和每次出现的余数有什么关系?

    引导学生发现:当余数重复出现时,商就要重复出现;商是随余数重复出现才重复出现的。

    刚才同学们说,如果继续除下去,无论是哪一位,只要余数重复出现25,它的商就重复出现3。

    教师带领学生验证。

    那我们怎么表示400÷75的商呢?

    引导学生说出:可以用省略号来表示除不尽的商。

    教师随学生的回答进行板书:400÷75=5.333…

    教师:我们所说的重复也叫做循环,像5.333…这样小数部分有一或几个个数字依次不断地重复出现的小数,就是循环小数。

    4.进一步认识循环小数。

    师生共同观察竖式78.6÷11。

    (1)观察78.6÷11的商是如何循环的。

    师生共同验证。

    (2)比较5.333…和7.14545…,这两个循环小数有什么不同?

    生:前一个循环小数是一个数字循环,后一个循环小数是两个数字循环。

    (3)尝试用循环小数的方式表示这个算式的商。

    教师根据学生的叙述板书:78.6÷11=7.14545…

    (4)提问。

    你觉得这样的算式除到哪一位就可以不除了呢?(只要余数重复了,就可以不除了)为什么?(因为像这样的算式余数循环,商也会跟着循环)

    教师指着5.333…和7.14545…告诉学生:像5.333…和7.14545…这样的小数都是循环小数。你能写出几个循环小数吗?

    学生写后,组织全班交流。

    (5)观察这些循环小数,说说它们有什么共同之处。

    引导学生观察、讨论后,指导学生说出:都是从小数部分的某一位起,都有一个数字或几个数字依次不断地重复出现。

    5.建立“循环节”的概念,指导循环小数的写法。

    请学生任意说出几个循环小数,教师板书,如:

    0.343434…  3.888…  17.2393939…  26.0764764…

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

    请同学们指出上面那些小数的循环节。

    教师指导书写:写循环小数的时候,为了简便,小数的循环部分只写出第一个循环节,并在循环节的首位和末位数字上面各记一个圆点。

    0e94ee5fed65722f6be11cfcc4084179.png

    板书设计

    循 环 小 数

    42.135÷5=8.427400÷75≈5.333…78.6÷11≈7.14545…

    小数部分位数是有限的小数叫做有限小数;

    小数部分位数是无限的小数叫做无限小数。

    1e9c647357e03a983b66243147cf1bef.png

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

    样的小数叫做循环小数。一个循环小数中依次不断重复出现的数字叫做这个循环小

    数的循环节。写循环小数时,可以只写第一个循环节,并在这个循环节的首位和末

    位上面各记一个圆点。

    课后反思

    1.创设问题情境,让学生成为发现者。初步感知有限小数、无限小数,让学生体验“循环”的含义,从而说出生活中的“循环现象” ,将生活与数学融合在一起,使学生真正理解了“循环”的含义。

    2.引导学生自主探索,参与知识形成的全过程。数学知识只有通过学生参与、探索才能转化为自己的知识,本节课通过算一算、想一想、观察、比较、讨论,让学生获得了循环小数的概念。在学习过程中,为学生提供了一个思考与合作交流的空间,充分调动了学生的学习积极性。

    3.运用新知,解决问题。设计不同层次的练习题,巩固所学知识,再通过讨论、师解、生自评,让不同的学生在数学学习中得到不同的发展,享受了不同的成功。

    5885d91ac3a6c40c8b62519866629902.gif点击阅读原文关注我每天获取最新资料

    展开全文
  • 题目链接:Repeating Decimals ...=3000),输出a/b的循环小数表示以及其循环节长度,例如a=5,b=43,小数表示为0.(116279069767441860465),循环节长度为21.  本题实际上模拟长除法的计算过程,其中每一次除法时都有...

    题目链接:Repeating Decimals

     UVA - 202

    题目描述:

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

        本题实际上模拟长除法的计算过程,其中每一次除法时都有被除数和余数,当被除数出现重复时就表示出现循环节,所以需要记录每一次的被除数及其在循环小数中的位置,需要时注意当除数不够除,每一次补零也需要记录其对应位置。

    map的使用:https://blog.csdn.net/newyoung518/article/details/16118141

    assert定义和用法:https://blog.csdn.net/aaa123524457/article/details/78780267

    代码实现:

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<map>     //定义map()
    #include<assert.h>    // 定义assert()
    #include<algorithm>
    using namespace std;
    const int Maxsize=3005;
    map<int,int> Pos;
    void solve(int n,const int d,string& ans,int &r)
    {
        assert(n%d&&n<d);
        ans='.';
        Pos.clear();
        while(true)
        {
            n*=10;
            int p=Pos[n];
            if(p==0)Pos[n]=ans.size();
            else
            {
                r=ans.size()-p;
                if(r>50)
                {
                    ans.erase(p+50);
                    ans+="...";
                }
                ans.insert(p,"(");
                ans+=')';
                break;
            }
            if(n<d)
            {
                ans+='0';
                continue;
            }
            int div=n/d,mod=n%d;
            ans+=(char)(div+'0');
            n=mod;
            if(n==0)
            {
                ans+="(0)";
                r=1;
                break;
            }
        }
    }
    int main()
    {
        int a,b;
        while(scanf("%d%d",&a,&b)==2)
        {
            string ans=".(0)";
            int r=1;
            if(a%b)
                solve(a%b,b,ans,r);
            printf("%d/%d = %d%s\n",a,b,a/b,ans.c_str());
            printf("   %d = number of digits in repeating cycle\n\n",r);
        }
        return 0;
    }
     

    展开全文
  • 从小数点后某一位开始依次不断地重复出现前一个或一节数字的十进制无限小数,叫做循环小数,如2.9666…, (在数学中它读作“二点九六,六循环” ), 定义循环小数的缩写法是将第一个循环节以后的数字全部略去,并将...
  • 把无限循环小数化为分数 给定一个无限循环小数,我们是否能把它化为分数呢?其实方法也很简单,其关键在于利用「无限循环」这一点。例如,给定小数0.272727...,如何把它化为分数呢?我们可以先把它写成 1 x 0....
  • =3000),输出a/b的循环小数表示以及循环节长度。例如a=5,b=43,小数表示为0.(116279069767441860465),循环节长度为21. 解题思路: 计算a/b的小数: 题目要求循环小数,简单的a/b运算必然无法正常得到答案,采用...
  • 今天带学生做练习,遇到一个循环小数的问题:题目:0.0909090…的循环节是( )。A.09 B.90 C.090 D.9090不少学生选择B项90,习题答案也给了B项,我思考了下,纠正为A项。这个地方有些别扭,不好解释,也没那么重要,...
  • "循环小数:"<<(int)t<<"."<<"("; //将小数点后面的各个位数单独取出 for(int i=0;i<15;i++){//循环部分,这里设置保留15位 t*=10; cout<<(int)t; t-=(int)t; } cout<<")"&...
  • 上述数列前n项的和,保留15位小数 样例输入 200 样例输出 98.683296008649080 然后是递归代码: #include double tg(double d); int main() { double n; scanf("%lf",&n); printf("%.15f\n",tg(n));...
  • A - 萌 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u ...Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题
  •  此题的关键是怎么判断商循环小数以及得到其循环部分。其实就是一个很简单的数学知识,如果两数相除,出现了两次相同的余数,则循环发生。 C#代码如下,其原理就是余数乘10再除以除数,若出现两次相同的余数,则可...
  • /* 浮点数相加 */ var allmuna; function accAdd(arg1, arg2) { var r1, r2, m, c; try { r1 = arg1.toString().split(".")[1].length; } catch (e) { r1 = 0;... try ...
  • 把无限循环小数化为分数给定一个无限循环小数,我们是否能把它化为分数呢?其实方法也很简单,其关键在于利用「无限循环」这一点。例如,给定小数0.272727...,如何把它化为分数呢?我们可以先把它写成 1 x 0.272727...
  • 讲到这里,大家就明白了,为什么目前数学家们还没有研究出来无限循环小数直接以小数形式进行运算规则。 还要讲一点,目前国内的教材包括高等数学的教材中都没讲明确指出无限循环小数不能直接以小数的形式进行四则...
  • 思路写在了代码注释里。代码://xi 3-8 Repeating Decimals.cpp /*第0步,分子是5,分母是7(分母在整个除法中始终不变),5/7的商是0,代表这个除法...50/7的商为7,代表这个除法的第一位小数是7,余数是1,乘以10
  • 什么是循环小数举例 A loop is a way of repeating lines of code more than once. The block of code contained within the loop will be executed again and again until the condition required by the loop is ...
  • 先来看一些例:(无法在3上记点,故在3前后以一“~”号代替,表示其从“~”号处开始无限循环)7/3=2.~3333~ 10/3=3.~33333~ 31/3=10.~3~ 127/3=42.~3~ 。。。。。好了,如何求出符合这样要求的正整数呢?我们...
  • 小数循环

    千次阅读 2007-01-17 01:03:00
     如得出的结果小数部分存在循环,就用括号括起来 ,如1/3=0.(3);22/5=4.4 ;1/7=(142857)Function xunhuan(ByVal N As Long, ByVal D As Long) As String 请依次输入N/D得形式,其中N为分子,D为分母If N Mod ...
  • 包括整数和通常所说的分数,此分数亦可表示为有限小数或无限循环小数.这一定义在数的十进制和其他进位制(如二进制)下都适用.如3,-98.11,5.72727272……,7/22都是有理数.有理数还可以划分为正有理数、负有理数和0.全体...
  •  我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。  如果我们把有限小数的末尾加上无限多个0,它们就有了统一的形式。  本题的任务是:在上面的约定下,求整数除法小数点后的第n位开始的3位数...
  • 一、循环之for循环1.1 for循环的语法与基本使用什么是for循环?为何要有for循环?如何使用for循环循环就是重复做某件事,for循环是python提供的第二种循环;一般for循环能做的,while循环都能做,之所以有for循环...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 67,938
精华内容 27,175
关键字:

循环小数概念是什么