• 输出循环小数


    刚刚在博客园看到的一个题,写出来,留作备份,两个整数a和b,输出他们的商,循环小数要加括号。

    example:

    1/3 输出 0.(3)

    2/8 输出 0.25

    23/6 输出 3.8(3)

    思路:
    两个数组,一个存储商,一个存储余数,前者用于检查余数是否重复出现,后者用来输出小数部分。

    1. 能整除的直接输出
    2. 否则,一直除,直到余数为0或者余数重复出现。输出所有的小数部分即可,两次余数出现之间的加上括号

    代码:

    代码
     1 #include <iostream>
     2 using namespace std ;
     3 
     4 // 检查余数curValue是否在以前出现过,以前的余数保存在数组a中,如果重复出现,返回其第一次出现的位置,否则返回-1
     5 int Check(int a[], int maxIndex, int curValue)
     6 {
     7     for (int i = 0; i < maxIndex ; i++)
     8     {
     9         if(a[i] == curValue)
    10             return i ;
    11     }
    12     return -1 ;
    13 }
    14 
    15 // 主函数
    16 // i是存放余数的数组,f是存放商的数组
    17 void Fraction(int i[], int f[], int a, int b)
    18 {
    19     // 能整除,直接输出并返回
    20     if(a % b == 0)
    21     {
    22         cout << a / b << endl ;
    23         return ;
    24     }
    25 
    26     // 输出整数部分
    27     cout << a / b << "." ;
    28 
    29     int c = 0 ; // 数组下标
    30     int t = a % b ;
    31     i[c] = t ;    // 第一个余数
    32     while (true)
    33     {
    34         if (t < b)
    35             t *= 10 ;        // 余数乘10,进行下一次
    36         f[c] = t / b ;        // 存储商
    37         i[++c] = t % b ;    // 存储余数
    38         t %= b ;            // 除
    39 
    40         if (t == 0//除尽,输出后返回
    41         {
    42             for (int j = 0; j < c; j++)
    43             {
    44                 cout << f[j] ;
    45             }
    46             cout << endl ;
    47             return ;
    48         }
    49 
    50         else
    51         {
    52             // 检查余数是否在之前出现过
    53             int r = Check(i, c, t % b) ;
    54 
    55             // 如果本次余数之前出现过,表明循环开始了
    56             if(r != -1)
    57             {
    58                 // 输出常规小数部分
    59                 for (int j = 0; j < r; j++)
    60                     cout << f[j] ;
    61 
    62                 cout << "(" ;
    63 
    64                 // 输出循环小数部分
    65                 for (int j = r; j < c; j++)
    66                     cout << f[j] ;
    67 
    68                 break ;
    69             }
    70         }
    71     }
    72 
    73     cout << ")" << endl ;
    74 }
    75 
    76 int main(void)
    77 {
    78     const int n = 100 ;
    79     int i[n] ; // 存储商的数组
    80     int f[n] ; // 存储余数的数组
    81 
    82     Fraction(i, f, 1161) ;
    83 
    84     system("pause") ;
    85     return 0 ;
    86 }
  • 相关阅读:
    Nuget常用命令(转)
    Core使用SAP Web Service
    jquery.dataTables动态列--转
    jqGrid随窗口大小变化自适应大小-转
    30个值得推荐的数据可视化工具--转
    Automapper问题记录
    MVC及MVC Core在filter中如何获取控制器名称和Action名称
    .Net Core使用 MiniProfiler 进行性能分析(转)
    Core中使用Hangfire
    ASP.NET 多环境下配置文件web.config的灵活配置---转
  • 原文地址:https://www.cnblogs.com/graphics/p/1689675.html
Copyright © 2020-2023  润新知