2013-10-09 52 views
1
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」。javascript中的分區

+0

整數除法?或者是什麼?請添加相關的詳細信息。 –

+0

'subtraction()'做什麼沒有參數? –

+0

如果「num1」大於「num2」,那麼循環將永遠不會終止。 – Pointy

回答

0

我固定的一些問題與您的代碼:

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,將導致一個無限循環,但我希望發現這些問題是樂趣的一部分。

編輯:較小的版本相同的代碼:

function divisionSmall(a,b) { 
     var x = 0; 
     while ((a-=b) > 0) x++; 
     console.log('Quotient', x); 
     console.log('Remainder', a+b); 
    } 

EDIT2:正確項:

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 S的挑戰:) 。祝你好運。

0

如果你做的號碼他們是做這個使用遞歸一個簡單的方法:

function divide(num,denom) { 
    if (num < denom) return 0; 
    return (1 + divide(num - denom, denom)); 
} 

對於你將不得不延長這一跟蹤如果數均小於0。此外負數,而簡潔利落,因爲最大調用堆棧大小將被超過,所以這對於大分子和小分母來說是分解的。

0

我相信你的問題是你的while循環。如果subtraction方法返回一個負數,它將不計算。

用戶Math.abs獲得絕對值。

<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>