首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单位: javascript

单位: javascript
EN

Stack Overflow用户
提问于 2013-10-09 15:18:00
回答 3查看 368关注 0票数 1
代码语言:javascript
复制
function subtraction(num1, num2){       
    var num3; 
    num3 = num1 - num2;
    document.writeln("Difference "+ num3);
    return (num3);
}    

function division(num1, num2){
    difference = parseFloat(subtraction());
    var x;
    while(difference > 0){
        difference = num1-num2;
        x = x + 1;
    }
    document.writeln("Quotient" + x);
}

嗨!我想做一个除法函数,但问题是我不会使用"/“。这就是我得到的,到目前为止,它打印出“未定义”,如果我声明x=0,它将打印出"0“。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-09 15:27:36

我修复了您的代码中的一些问题:

代码语言:javascript
复制
function division(num1, num2){
        var difference = num1-num2; // difference is now a local variable

        var x = 0;  // x should be initialized
        while(difference > 0){
            difference = difference-num2; // difference should change, not always be num1-num2
            x = x + 1;
        }
        console.log("Quotient" + x);
        console.log("Remainder" + (difference+num2));
   }

http://jsbin.com/UQIqejo/1/edit

算法本身仍然存在一些问题,因为num2小于或等于0将导致无限循环,但我希望找到这些问题是乐趣的一部分。

编辑:相同代码的较小版本:

代码语言:javascript
复制
 function divisionSmall(a,b) {
      var x = 0;
      while ((a-=b) > 0) x++;
      console.log('Quotient', x);
      console.log('Remainder', a+b);
    }

EDIT2:正确除法:

代码语言:javascript
复制
function divisionSmall(a,b) {
  var x = 0;
  while ((a-=b) > 0) x++;  
  return [x, a+b];
}

function divisionCorrect(a,b) {
  var ans;
  if (b === 0) return ['INF', 0];  


  if ((a > 0) && (b > 0)) {
    return divisionSmall(a,b);
  }

  if ((a > 0) && (b < 0)) {
    ans = divisionSmall(a,-b);
    return [-ans[0], ans[1]];
  }

  if ((a < 0) && (b > 0)) {
    ans = divisionSmall(-a,b);
    return [-ans[0] - 1, b-ans[1]];
  }


  if ((a < 0) && (b < 0)) {
    ans = divisionSmall(-a,-b);
    return [ans[0] + 1, -b-ans[1]];
  }
}

console.log(divisionCorrect(11,3));   //  3, 2
console.log(divisionCorrect(11,-3));  // -3, 2
console.log(divisionCorrect(-11,3));  // -4, 1
console.log(divisionCorrect(-11,-3)); //  4, 1

在不使用if的情况下执行逻辑仍然面临挑战:)。祝好运。

票数 0
EN

Stack Overflow用户

发布于 2013-10-09 15:30:17

如果您执行数字,它们是使用递归实现此操作的一种更简单的方法:

代码语言:javascript
复制
function divide(num,denom) {
  if (num < denom) return 0;
  return (1 + divide(num - denom, denom));
}

对于负数,如果数字小于0,则必须将其扩展以跟踪。此外,虽然简洁和整洁,这细分为大分子和小分母,因为最大调用堆栈大小将超过。

票数 0
EN

Stack Overflow用户

发布于 2013-10-09 15:32:41

我相信你的问题与你的时间循环有关。如果subtraction方法返回一个负数,它将不会计算。

用户Math.abs获取绝对值。

代码语言:javascript
复制
   <script>
   function division(num1, num2){
        var difference = Math.abs(parseFloat(subtraction(num1, num2)));
        var x = 0;
        while(difference > 0){
            difference = difference-num2;
            x = x + 1;
        }
        document.writeln("Quotient" + x);
   }
   function subtraction(num1, num2){ 
      var num3; 
      num3 = num1 - num2; 
      document.writeln("Difference "+ num3); return (num3); 
   }
   </script>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19276044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档