高精度分数

问题 E: 【高精度】高精度分数

时间限制: 1 Sec   内存限制: 64 MB
提交: 73   解决: 21
[ 提交][ 状态][ 讨论版]

题目描述

“人无远虑,必有近忧”是修罗王一直以来恪守的信条,为了以防万一,他在很久以前就将《魔法宝典》的全部信息编码为一个巨大无比的自然数,并在这个数前加一个0和小数点,使它变成一个分数。然后他在戒指上刻了一个记号,使记号的两端长度比等于这个分数。这样,虽然他在入狱时手上只带了一个戒指,但只要测量出戒指上记号的比值M/N,他就可以还原《魔法宝典》的全部信息。

现在的问题是:已知分数M/N,试计算M/N(0<M<N<100)的值。如果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

#include<cstdio>
using namespace std;
int main()
{
    int n,m;
    scanf("%d/%d",&m,&n);
    int modnum[105]={0},div[105]={0};
    int k=-1,judge=1;
    printf("%d/%d=0.",m,n);
    modnum[m]=1;
    for(int i=1;i<105&&k==-1;i++)
    {
        m*=10;
        div[i]=m/n;
        m=m%n;
        if(modnum[m])
        {
            k=i+1;
            judge=0;
            break;
        }
        modnum[m]=i+1;
        if(modnum[0])
        {
            k=i+1;
            break;
        }
    }
    for(int i=1;i<k;i++)
        printf("%d",div[i]);
    printf("\n");
    if(!judge)
    {
        printf("from %d to %d\n",modnum[m],k-1);
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值