zoukankan      html  css  js  c++  java
  • 循环小数


    Problem Description

    1/7 = 0.142857142... 是个无限循环小数。
    任何有理数都可以表示为无限循环小数的形式。

    本题目要求即是:给出一个数字的循环小数表示法。

    Input

    整数,整数

    每个整数范围均为:1~1000

    Output


    程序输出两个整数做除法产生的小数或无限循环小数(循环节用方括号括起)。
    Sample Input

    1,5
    1,7
    7,6

    Sample Output

    0.2
    0.[142857]

    1.1[6]


    求循环节,主要判断是否出现循环节,如果出现商和余数都相等的情况就说明循环节出现了,所以可以把余数存在一个数组里,商存在一个数组里,然后多次求商和余数,每求出一组商一组余数就判断一次是否出现循环节



    #include<stdio.h>
    #include<string.h>
    int s[1000],y[1000],q=0,p=0;
    int flag=0;
    int xun(int sh,int yu)
    {
    	int i;
    	for(i=0;i<q;i++)
    	{
    		if(s[i]==sh && y[i]==yu)
    		{
    			flag=i;
    			return 0;
    		}
    	}
    	return 1;
    }
    int main()
    {
    	int m,n,i,j,k;
    	while(scanf("%d,%d",&m,&n)!=EOF)
    	{
    		flag=0,q=0,p=0;
    		int t=0;
    		int sh,yu;
    		memset(s,0,sizeof(s));
    		memset(y,0,sizeof(y));
    		int jie=m/n;
    		if(m%n==0)
    			t=1;
    		if(m>=n)
    			m=m%n;
    		sh=m*10/n;
    		yu=(m*10)%n;
    		while(xun(sh,yu)==1)
    		{
    			s[q++]=sh;
    			y[p++]=yu;
    			yu*=10;
    			sh=yu/n;
    			yu=yu%n;
    		}
    		if(t==1)
    		{
    			printf("%d
    ",jie);
    			continue;
    		}
    		else
    		{
    			printf("%d.",jie);
    			for(i=999;i>=0;i--)
    			{
    				if(s[i]!=0)
    				{
    					k=i;
    					break;
    				}
    			}
    			for(i=0;i<flag;i++)
    				printf("%d",s[i]);
    			for(i=flag;i<=k;i++)
    			{
    				if(i==flag)
    					printf("[");
    				printf("%d",s[i]);
    				if(i==k)
    					printf("]");
    			}
    			printf("
    ");
    		}
    	}
    	return 0;
    }



  • 相关阅读:
    Java基础-3y
    对线面试官面试系列-3y
    从零单排学Redis【青铜】
    mock官方文档
    route路由组件传递参数
    axios拦截器与vue代理设置
    Sass使用方法
    Less使用方法
    Vue-cli
    Vue-组件注册
  • 原文地址:https://www.cnblogs.com/szj-lxl/p/6684522.html
Copyright © 2011-2022 走看看