Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.08.2013, 17:44
Новичок на форуме
Отправить личное сообщение для croatoan Посмотреть профиль Найти все сообщения от croatoan
 
Регистрация: 21.08.2013
Сообщений: 2

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



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

/* функция находит разность
* 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;
}


Заранее, спасибо)
Ответить с цитированием
  #2 (permalink)  
Старый 21.08.2013, 19:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

большие числа вычитание
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) )

Последний раз редактировалось рони, 14.07.2016 в 15:44.
Ответить с цитированием
  #3 (permalink)  
Старый 21.08.2013, 20:00
Новичок на форуме
Отправить личное сообщение для croatoan Посмотреть профиль Найти все сообщения от croatoan
 
Регистрация: 21.08.2013
Сообщений: 2

рони, круто!

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

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

Большое Вам спасибо, рони!!!
Ответить с цитированием
  #4 (permalink)  
Старый 21.08.2013, 20:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Сообщение от croatoan
12345 - 12342 = 00003
исправлено + в 16 строке добавлен
коментарии пас ))) медитируйте пока не просветлеет - может придумаите лучше
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разделение разрядов чисел с дробной частью Demath Общие вопросы Javascript 11 08.07.2013 01:11
НОД более чем 2-х чисел Demath Общие вопросы Javascript 4 06.01.2013 05:27
Генератор случайных чисел с возможностью ввода диапазона. Как сделать? Sovereign Общие вопросы Javascript 3 10.06.2011 08:34
Работа с последовательностью натуральных чисел Stillife Общие вопросы Javascript 1 18.05.2011 20:03
Сложение случайных чисел user1111 Общие вопросы Javascript 14 08.11.2010 22:06