当前位置:   article > 正文

有理循环小数 1/7 = 0.142857142... 是个无限循环小数。 任何有理数都可以表示为无限循环小数的形式。 本题目要求即是:给出一个数字的循环小数表示法。_输入0.142857 输出七分之一

输入0.142857 输出七分之一
  1. /* 有理循环小数
  2. 1/7 = 0.142857142... 是个无限循环小数。
  3. 任何有理数都可以表示为无限循环小数的形式。
  4. 本题目要求即是:给出一个数字的循环小数表示法。
  5. 例如:
  6. 输入:
  7. 1,5
  8. 则输出:
  9. 0.2
  10. 输入:
  11. 1,7
  12. 则输出:
  13. 0.[142857]
  14. 输入:
  15. 7,6
  16. 则输出:
  17. 1.1[6]
  18. 用户输入的格式是:
  19. 整数,整数
  20. 每个整数范围均为:1~1000
  21. 程序输出两个整数做除法产生的小数或无限循环小数(循环节用方括号括起)。
  22. */
  23. import java.util.Scanner;
  24. import java.util.List;
  25. import java.util.ArrayList;
  26. public class 有理数的循环节 {
  27. public static String f(int m,int n){
  28. StringBuffer sb = new StringBuffer(); // 保存结果
  29. List<Integer> lis = new ArrayList<Integer>(); // 记录所有余数
  30. String s = m/n+"."; // 保存整数部分
  31. m = m%n; // 得到余数
  32. while(m!=0){
  33. if(lis.contains(m)){
  34. int i=0; // 得到循环节开始的位置 i
  35. for(;i<sb.length();i++){
  36. if(sb.charAt(i)-'0'==m*10/n){
  37. break;
  38. }
  39. }
  40. sb.insert(i,"["); // 为循环节添加"[ ]"
  41. sb.insert(sb.length(),"]");
  42. break;
  43. }else{
  44. lis.add(m); // 添加商
  45. sb.append(m*10/n); // 添加结果元素
  46. }
  47. m = m*10%n; // 得到余数
  48. }
  49. return sb.insert(0, s).toString();
  50. }
  51. public static void main(String[] args){
  52. Scanner scan = new Scanner(System.in);
  53. System.out.println("整数范围均为:1~1000(格式: 整数,整数 )");
  54. String s = scan.nextLine();
  55. String[] ss = s.split(",");
  56. int m = Integer.parseInt(ss[0]);
  57. int n = Integer.parseInt(ss[1]);
  58. System.out.println(f(m,n));
  59. }
  60. }

运行结果:
整数范围均为:1~1000(格式: 整数,整数  )
1,7
0.[142857]

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/302739
推荐阅读
相关标签
  

闽ICP备14008679号