Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 14.07.2016, 19:09
Аватар для JavDev
Новичок на форуме
Отправить личное сообщение для JavDev Посмотреть профиль Найти все сообщения от JavDev
 
Регистрация: 14.07.2016
Сообщений: 6

Сообщение от рони Посмотреть сообщение

реализация вычитания
http://javascript.ru/forum/showthrea...635#post268635
Спасибо. А не подскажете как работает этот кусок кода?
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)
      }

Как я понимаю, чтобы изменить вычитание на, например, умножение нужно исправить
max[i] * (min[i] || 0)
и что-то еще
Ответить с цитированием
  #12 (permalink)  
Старый 14.07.2016, 20:14
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,133

JavDev,
100 - 78
проход по массиву max = [0,0,1] , min = [8,7], c = 0
1 шаг
b = 0 - (8 || 0) + 0;
b = -8
b < 0 result[i] = 10 + -8 = 2 , c = -1
result = [2]
2 шаг
b = 0 - (7 || 0) + -1;
b = -8
b < 0 result[i] = 10 + -8 = 2 , c = -1
result = [2,2]
3 шаг
b = 1 - (null|| 0) + -1;
b = 0
b == 0 result[i] = 0, c = 0
result = [2,2,0]
result.reverse() ...
result = "22"
100 - 78 = 22
алгоритм умножения не знаю
Ответить с цитированием
  #13 (permalink)  
Старый 14.07.2016, 20:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,133

большие числа сложение
JavDev,
var max = "9999" , min = "9";

function difference(max, min) {
      max = max.split('')
          .reverse();
      max.push(0);
      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 > 9 ? (c = (b/10|0), b % 10) : (c = 0, b)
      }
      return result.reverse()
          .join('')
          .replace(/^0+/, '');
  }
 alert(difference(max,min) )
Ответить с цитированием
  #14 (permalink)  
Старый 14.07.2016, 20:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,133

JavDev,
на всякий случай -- сложение и вычитание в примерах для неотрицательных чисел.
Ответить с цитированием
  #15 (permalink)  
Старый 14.07.2016, 21:23
Аватар для JavDev
Новичок на форуме
Отправить личное сообщение для JavDev Посмотреть профиль Найти все сообщения от JavDev
 
Регистрация: 14.07.2016
Сообщений: 6

рони,
Спасибо большое А алгоритм умножения принципиально отличается?
Если просто поменять знак, то на какие-то числа работает, а на какие-то нет.
Ответить с цитированием
  #16 (permalink)  
Старый 14.07.2016, 22:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,133

Сообщение от JavDev
алгоритм умножения принципиально отличается?
надо смотреть ... а так можно использовать сложение миллиарды раз ...
Ответить с цитированием
  #17 (permalink)  
Старый 01.08.2019, 23:20
Аватар для Tamilla
Новичок на форуме
Отправить личное сообщение для Tamilla Посмотреть профиль Найти все сообщения от Tamilla
 
Регистрация: 01.08.2019
Сообщений: 1

порядок действий в умножении реализуется по очень простому правилу:

По умолчанию, при отсутствии дополнительных элементов, они выполняются в порядке написания. 15 - 3 + 7 = 19

При наличии скобок сначала выполняется действие, в них заключенное. 15 - (3 + 7) = 5

При появлении знаков или первыми выполняются они, лишь затем сложение или вычитание. 2 + 2 х 2 = 2 + 4 = 6 2 + 2 ÷ 2 = 2 + 1 = 3

Скобки могут частично ослабить эти правила, так как действие в них заключенное всегда выполняется в первую очередь. (2 + 2) х 2 = 4 х 2 = 8 (2 + 2) ÷ 2 = 4 ÷ 2 = 2

Если в скобки заключено сложное выражение, внутри них работают стандартные правила. (4 + 7 - 1) + 5 = (11 - 1) + 5 = 15 (5 + 3 х 2) - 4 = (5 + 6) - 4 = 11 - 4 = 7

При появлении двух и более знаков или нужно учитывать их очередность. 5 х 2 - 8 ÷ 4 = 10 - 2 = 8
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Целочисленная арифметика bf_karatel Общие вопросы Javascript 0 20.04.2013 01:17