Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   вычитание длинных чисел (https://javascript.ru/forum/misc/40837-vychitanie-dlinnykh-chisel.html)

croatoan 21.08.2013 17:44

вычитание длинных чисел
 
Добрый день!



Задача: найти разность двух неотрицательных чисел

/* функция находит разность
* arr1 - большее число
* arr1 - меньшее число
* len - длина большего числа
*/

Ребят, кто подскажет что у меня не так:
function subtraction(arr1,arr2,len) {
    var arrResult = [];
    arr1 = arr1.reverse();
    arr2 = arr2.reverse();
    
    for(var i=0; i < len; ++i) { // инициализируем 0 результативный массив
        arrResult[i] = 0;
    }
    for(var i=0; i<len; ++i) {
        if(i < len-1) {
            arr1[i + 1] -= 1;
            arrResult[i] = 10 + arr1[i];
        } else {
            arrResult[i] += arr1[i];
        }
        if(!isNaN(arr2[i])) {
            arrResult[i] -= arr2[i]; // вычитаем
        }

        if(arrResult[i] / 10 > 0) {
            arrResult[i] %= 10;
            if(i < len - 1) {
                arrResult[i + 1] += 1;
            }
        }
    }
    return arrResult;
}


Заранее, спасибо)

рони 21.08.2013 19:12

большие числа вычитание
 
croatoan,
Вариант ...
var max = "10000000000000000000000000000" , min = "911";

function difference(max, min) {
      max = max.split('')
          .reverse();
      min = min.split('')
          .reverse();
      var len = max.length,
          result = [];
      for (var i = 0, b = 0, c = 0; i < len; i++) {
          b = max[i] - (min[i] || 0) + c;
          result[i] = b < 0 ? (c = -1, 10 + b) : (c = 0, b)
      }
      return result.reverse()
          .join('')
          .replace(/^0+/, '');
  }
 alert(difference(max,min) )

croatoan 21.08.2013 20:00

рони, круто! :)

вот только ведущие 0 появляются...
12345 - 12342 = 00003

Не могли бы вы пояснить тело цикла?

Большое Вам спасибо, рони!!!

рони 21.08.2013 20:38

Цитата:

Сообщение от croatoan
12345 - 12342 = 00003

исправлено + в 16 строке добавлен
коментарии пас ))) медитируйте пока не просветлеет - может придумаите лучше


Часовой пояс GMT +3, время: 18:24.