2013-10-09 3 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()' do без аргументов? –

+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 приведет к бесконечному циклу, но я ожидаю, что найти эти проблемы - часть удовольствия.

EDIT: Меньшая версия одного и того же кода:

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 с :) , Удачи.

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> 
Смежные вопросы