两个数相除,得到一个小数,如果小数是个循环小数,则找到循环节用括号将循环节括起来,例如:1/3=0.3333333则显示0.(3)如果是不循环小数则输出小数点后100位。而现在计算机精度双精度型只能到16位,这道题我只有一点点思路就是用数组做,但是没考虑太完善,希望高手帮忙给个程序代码,供我这个初学者参考,谢谢!

解决方案 »

  1.   

    接着楼上说的
    a/b的话,你可以让先让a扩大100倍,然后从得到的结果里找循环,然后在把结果处理成想要的格式。
      

  2.   

    ----------------------------------------------------------------------------------------------------------------
    如果两个数或化简后(sqrt(2)*2 /sqrt(2) = 2 )都是有理数的,结果肯定是有理数(整数,有限小数,循环小数)。
    ----------------------------------------------------------------------------------------------------------------
    至于lz提出的问题是可以用数组模拟大数,自己手工做竖式除法
    关于判断循环小数的方法,如果小数点后的位数大于被除数并且余数出现重复的时候,就是循环小数。
    循环节就是重复余数之间的部分。
    比如   22/7 = 3.(142857)
                    3.1428571
                 -------------------
             7  /  22
                   21
                  -----------------
                    10            --------
                     7
                  -----------------
                     30
                     28
                 ------------
                      20
                      14
                 ------------
                       60
                       56
                    -------  
                        40
                        35
                    -------
                         50
                         49
                    --------
                          10   ---〉开始重复
                              7
          
    ----------------------------------------------------------------------------------------------------------------
      

  3.   

    各位大哥谁要是写出来了可以发到我邮箱里面[email protected]小弟不胜感激!
      

  4.   

    做一个hash表记录被除数。
    然后逐步做除法,得出/后的值和余数,然后余数左移并存放在hash表里面。
    直到最新出现的被除数已经存在于你的hash表里时,才能证明你遇到循环了。(如,结果是0.1313137,验证除出来的结果是会出错的)
    具体的算法请自行练习。