zoukankan      html  css  js  c++  java
  • 分数的值

    分数的值

     

    Problem Description

    输入一个以N/D(0<=N<=65535,0<=D<=65535)形式的分数,其中N为分子,D为分母,输出它的小数形式(运算结果小数点后最多保留100位)。假如它的小数形式存在循环节,要将其用括号括起来。例如:1/3=0.33333...表示为.(3),又如41/333=0.123123123...表示为0.(123)。

    Input

    每行2个用空格分开的整数N和D

    Output

    每行输出一个结果

    Sample Input

    1 3
    22 5
    1 7

    Sample Output

    1/3=0.(3)
    22/5=4.4
    1/7=0.(142857)
    

    解释:

    这是一个数学题吧,模拟数学的计算过程。对于N / D,每一次都可以得到一个商和一个余数,如果一个余数出现两次,那么就是循环一个循环小数。题目有说明,最多只输出100位。既然要判断一个数有没有出现两次呢,有一种办法就是用一个数组下标来记录,例如flag[i]=1  就是表示数 i 出现了1次,这个题呢,D <= 65535, 感觉不是很大,可以开辟这么大的数组。但好像没有必要,毕竟只会用到100个,多余的6W多空间会被浪费。可以考虑用map,set等数据结构来保存。

     1 #include<bits/stdc++.h>
     2 
     3 using namespace std;
     4 const int N = 101;
     5 
     6 int remaind[N]; // 余数
     7 int integ[N]; // 整数
     8 bool flag_integ[65536];
     9 
    10 int main()
    11 {
    12     int n, d;
    13     while (cin >> n >> d){
    14         memset(remaind, 0, sizeof(remaind));
    15         memset(integ, 0, sizeof(integ));
    16         memset(flag_integ, 0, sizeof(flag_integ));
    17         int cnt = 0;
    18         
    19         integ[cnt] = n/d;
    20         flag_integ[n] = 1;
    21         remaind[cnt] = n % d;
    22         flag_integ[remaind[cnt]] = 1;
    23 
    24         cnt++;
    25         int flag = 0;
    26         while (cnt <= 100 && remaind[cnt-1] != 0) {
    27 
    28             integ[cnt] = (remaind[cnt-1] * 10) / d;
    29             remaind[cnt] = (remaind[cnt-1] * 10) % d;
    30 
    31             if (remaind[cnt] == 0) break;
    32             if (flag_integ[remaind[cnt]]) {
    33                 flag = 1; break;
    34             }
    35 
    36             flag_integ[remaind[cnt]] = 1;
    37             cnt++;
    38         }
    39 
    40         if (flag){
    41             printf("%d/%d=%d.(", n, d, integ[0]);
    42             for (int i = 1; i <= cnt; i++){
    43                 printf("%d", integ[i]);
    44             }
    45             printf(")
    ");
    46         } else {
    47             printf("%d/%d=%d.", n, d, integ[0]);
    48             for (int i = 1; i <= cnt; i++) {
    49                 printf("%d", integ[i]);
    50             }
    51             printf("
    ");
    52         }
    53 
    54 
    55     }
    56     return 0;
    57 }
    View Code

    我没有用那些数据结构的原因是,我比较懒,用数组保存就很快,写代码很快。懒得扣jio,贼懒

  • 相关阅读:
    【原】为什么选择iPhone5的分辨率作为H5视觉稿尺寸
    js 进制转换
    抓包 抓nodejs的包 抓浏览器的包 抓手机的包
    nginx 安装 ssl 证书
    github 被强了!太丧心病狂了!
    yandex 图片自动下载
    如何获取命令行的原始参数?
    npm 加速之 yarn cnpm pnpm
    json 格式化处理工具
    两分钟观看 nodejs、 iojs、 npmjs 之间的狗血剧情
  • 原文地址:https://www.cnblogs.com/gznb/p/11207317.html
Copyright © 2011-2022 走看看