若是凉夜已成梦

青春里 总有些事情要努力去做 总有些梦想要拼命去追。


  • 运维

  • 前端

  • 编程

  • 随笔

  • hust-oj

1439: 2.4.5 Fractions to Decimals 分数化小数

发表于 2017-10-06   |   分类于 HUSTOJ   |   阅读次数 1,111

题目描述

写一个程序,输入一个形如N/D的分数(N是分子,D是分母),输出它的小数形式。
如果小数有循环节的话,把循环节放在一对圆括号中。例如,
1/3 = .33333333 写成0.(3)
41/333 = 0.123123123… 写成0.(123)
用xxx.0 成表示整数
典型的转化例子:
1/3 = 0.(3)
22/5 = 4.4
1/7 = 0.(142857)
2/2 = 1.0
3/8 = 0.375
45/56 = 0.803(571428)

输入

单独的一行包括被空格分开的 N和D, 1 <= N,D <= 100000。

输出

小数的表示方法上面说的很明白了,如果输出的长度超过76个字符,每行输出76个。

样例输入

45 56

样例输出

0.803(571428)

参考代码

#include<stdio.h>
int a[100001],count=2;
int main() 
{
    int xun(int i,int j);
    int m,n,i,j,q,c,l;
    scanf("%d %d",&m,&n);
    for (i=0;i<=100000;i++) 
    {
        a[i]=m/n;
        m=(m%n)*10;
        if(m==0) 
        {
            l=i;
            break;
        }
    }
    printf("%d.",a[0]);
    c=a[0];
    while(c>0) 
    {
        c=c/10;
        if(c==0) 
        {
            count++;
        }
    }
    if(m!=0) 
    {
        for (i=1;i<=100000;i++) 
        {
            for (j=i+1;j<100000;j++) 
            {
                if(a[i]==a[j]) 
                {
                    if(xun(i,j)==1) 
                    {
                        break;
                    }
                }
            }
            if(xun(i,j)==1) 
            {
                break;
            }
        }
        for (q=1;q<=100000;q++) 
        {
            if(count%76==0) 
            {
                printf("n");
        }
        if(q!=i)
        {
            printf("%d",a[q]);
            count++;
        }
        if(q==i)
        {
            printf("(");
            count++;
            if(count%76==0)
            {
               printf("n");
            }
            printf("%d",a[q]);
            count++;
        }
        if(q==j-1)
        {
            printf(")");
            break;
        }
    }
    }
    else
    {
        printf("%d",a[1]);
        count++;
       for(i=2;i<=l;i++)
       {
          if(count%76==0)
          {
              printf("n");
          }
          printf("%d",a[i]);
          count++;
       }
    }
}
int xun(int i,int j)
{
    for(j,i;j<=100000;i++,j++)
    {
        if(a[i]!=a[j])
        {
            break;
        }
    }
    if(j>100000)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

解析

暂无

hustoj

发表评论 取消回复

电子邮件地址不会被公开。 必填项已用*标注

*
*


hoxis wechat
著作权归作者所有
站点更新说明
  • 文章目录
  • 站点概览
若是凉夜已成梦

若是凉夜已成梦

青春里 总有些事情要努力去做 总有些梦想要拼命去追。

1904 日志
6 分类
12 标签
RSS
weibo github twitter facebook

友情链接

原站点 Dreams孤独患者 Skip
© 2017 若是凉夜已成梦
Powered by WordPress | 已运行
Theme By NexT.Mist