zoukankan      html  css  js  c++  java
  • 【高精度】高精度分数[c++]

                                                           【高精度】高精度分数                                                  
    

    时间限制: 1 Sec 内存限制: 64 MB

    题目描述
    “人无远虑,必有近忧”是修罗王一直以来恪守的信条,为了以防万一,他在很久以前就将《魔法宝典》的全部信息编码为一个巨大无比的自然数,并在这个数前加一个0和小数点,使它变成一个分数。然后他在戒指上刻了一个记号,使记号的两端长度比等于这个分数。这样,虽然他在入狱时手上只带了一个戒指,但只要测量出戒指上记号的比值M/N,他就可以还原《魔法宝典》的全部信息。
    现在的问题是:已知分数M/N,试计算M/N的值。如果M/N是无限循环小数,则计算并输出它的第一循环节,同时要求输出循环节的起止位置(小数位的序号)。

    输入
    只有一行,即M/N,其中0 < M < N < 100。

    输出
    输出M/N的值,如为无限循环小数,则输出第一循环节及起止位置。

    样例输入
    17/97

    样例输出
    17/97=0.175257731958762886597938144329896907216494845360824742268041237113402061855670103092783505154639
    from 1 to 96

    提示
    【输入样例2】
    1/2

    【输出样例2】
    1/2=0.5

    可以将商存放在一维数组中,进行除法运算,模拟人的手工操作,即每次求出商的一位后,将余数乘以10,再计算商的下一位。若某次余数为0,则为有限不循环小数。若某次计算后的余数与前面某个余数相同时,则M / N是无限循环小数。

    代码[c++]

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    using namespace std;
    const int maxn = 105;
    
    int main()
    {
        int m,n;
        while(scanf("%d/%d",&m,&n)!=EOF)
        {
            int modnum[100] = {0};//记录每个余数出现的次数(余数的范围0~98)
            printf("%d/%d=0.",m,n);
            int div[maxn] = {0};
            int k=-1;
            int judge=1;
            modnum[m]=1;//将被除数也算作余数
            for(int i=1; i<105&&k==-1; i++)
            {
                m*=10;
                div[i]=m/n;
                m=m%n;
                if(modnum[m])//若某次计算后的余数与前面某个余数相同时,则M/N是无限循环小数
                {
                    k=i+1;
                    judge=0;
                    break;
                }
                modnum[m]=i+1;
                if(modnum[0])//若某次余数为0,则为有限不循环小数
                {
                    k=i+1;
                    break;
                }
            }
            for(int i=1; i<k; i++)
                printf("%d",div[i]);
            printf("
    ");
            if(!judge)//输出循环节
                printf("from %d to %d
    ",modnum[m],k-1);
        }
        return 0;
    }
  • 相关阅读:
    【STM32 .NET MF开发板学习29】摄像头蓝牙图像远程获取
    【.Net MF网络开发板研究04】Socket编程之服务端
    【.Net MF网络开发板研究01】IP地址设定及简单web演示
    【.Net MF网络开发板研究02】Http Server功能演示
    用VB.net开发.NET Micro Framework
    【.Net MF网络开发板研究03】获取雅虎天气(HttpClient示例)
    js中URL编码参数(UrlEncode,UrlDecode)[ansi编码] PHP好使 简单
    PHP通过SMTP实现发送邮件_包括附件 简单
    mysql case then使用 简单
    PHP中$_SERVER的详细参数与说明 简单
  • 原文地址:https://www.cnblogs.com/NeilThang/p/9356634.html
Copyright © 2011-2022 走看看