当前位置:首页 > 求公约数最简比值javascript算法

求公约数最简比值javascript算法

发布于 2018-06-07 阅读 580 次 Javascript
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>公约数 简比</title>
  6. <style>
  7. div{padding:20px;}
  8. </style>
  9. </head>
  10. <body>
  11. <script type="text/javascript">
  12. //求两个数的比值
  13. function getRatio(a, b){
  14. var ma = 1,mb = 1,c;//倍数
  15. a += '',b += '';
  16. if(a.indexOf('.')>-1){
  17. ma = Math.pow(10,a.split('.')[1].length);
  18. }else if(a.indexOf('/')>-1){
  19. ma = +a.split('/')[1]
  20. }
  21. if(b.indexOf('.')>-1){
  22. mb = Math.pow(10,b.split('.')[1].length);
  23. }else if(b.indexOf('/')>-1){
  24. mb = +b.split('/')[1]
  25. }
  26. a = eval(a)*ma*mb;
  27. b = eval(b)*ma*mb;
  28. c = getCommonDivisor(a,b);
  29. console.log('最小整数比:'+(a/c)+':'+(b/c));
  30. }
  31. // 计算多个数字的最简比值
  32. function getRatioMore(arr){
  33. var i = 0, ln = arr.length, newArr = [],
  34. resArr = [],
  35. mnum=1, multiple = 1, c;
  36. //制作新数组
  37. for(i=0; i<ln; i++){
  38. arr[i] += '';
  39. if(arr[i].indexOf('.')>-1){
  40. mnum = Math.pow(10, arr[i].split('.')[1].length);
  41. multiple *= mnum;
  42. }else if(arr[i].indexOf('/') >-1){
  43. mnum = +arr[i].split('/')[1];
  44. multiple *= mnum;
  45. }
  46. }
  47. for(var j=0; j<ln; j++){
  48. newArr[j] = arr[j] * multiple;
  49. }
  50. console.log(newArr);
  51. c = getCommonDivisorMore(newArr);//求公约数
  52. for(var i=0; i<ln; i++){
  53. resArr.push(newArr[i]/c);
  54. }
  55. console.log(resArr.join(':'));
  56. }
  57. //计算最大公约数,阿基里德算法
  58. function getCommonDivisor(a,b){
  59. var c;
  60. if(a<b){
  61. b = [a,a=b][0];
  62. }
  63. while(c = a%b){
  64. a = b;
  65. b = c;
  66. }
  67. return b;
  68. }
  69. //计算多个数字的最大公约数
  70. function getCommonDivisorMore(arr){
  71. if(arr instanceof Array && arr.length > 1){
  72. var i, ln = arr.length, prevd = arr[0];
  73. for(i = 0; i<ln; i++){
  74. prevd = getCommonDivisor(prevd, arr[i]);
  75. }
  76. return prevd;
  77. }
  78. }
  79. console.log(getCommonDivisorMore([205, 620, 320, 440]));
  80. getRatioMore([20.5, 62, 32, 44])
  81. </script>
  82. </body>
  83. </html>