//Сложность заключается в запоминании единицы при сложеннии и добавлении её на следующей итерации.
longNumber1 = '2'
longNumber2 = '149'
//сравниваются числа,и в то которое меньше по длинне добавляются нули
if (longNumber1.length > longNumber2.length) {
var abs = longNumber1.length - longNumber2.length
for (var i = 0; i < abs; i++) {
longNumber2 = '0' + longNumber2
}
} else {
var abs = longNumber2.length - longNumber1.length
for (var i = 0; i < abs; i++) {
longNumber1 = '0' + longNumber1
}
}
var str = '' //результат сложения двух чисел
var currentNum = '' //если в результате сложения число двузначное, то берем второе число и записываем на эту позицию
var nextPos = 0 //и запоминаем единицу в будущем
for (var i = longNumber1.length - 1; i >=0; i--) {
if ( (Number(longNumber1[i])) + (Number(longNumber2[i])) < 10 ) {
str = Number(longNumber1[i]) + Number(longNumber2[i]) + str
nextPos = 0
} else {
str = Number(longNumber1[i]) + Number(longNumber2[i])
str = String(str)
currentNum = (str.slice(1,2)) //берем вторую цифру двузначного числа
str = currentNum // записываем ее на эту позицию
nextPos = 1 //т.к число двузначное то мы должны прибавить единицу к след.цифре
}
}
console.log(longNumber1)
console.log(longNumber2)
console.log(str)
По ходу исполнения кода Вы затираете значение str
. Вам нужно было выбрать другое название переменной для str
в блоке else
.
И всегда используйте ;
в JavaScript!
Я сделал минимально необходимые правки в стиле, в котором написан весь код. Но, должен заметить, что стиль пока очень хромает. Всё можно сделать гораздо более оптимально. Ну ничего, научитесь - со временем сделаете.
longNumber1 = '999';
longNumber2 = '149';
//сравниваются числа, и в то, которое меньше по длине, добавляются нули
if (longNumber1.length > longNumber2.length) {
var abs = longNumber1.length - longNumber2.length;
for (var i = 0; i < abs; i++) {
longNumber2 = '0' + longNumber2;
}
} else {
var abs = longNumber2.length - longNumber1.length;
for (var i = 0; i < abs; i++) {
longNumber1 = '0' + longNumber1;
}
}
var str = ''; //результат сложения двух чисел
var currentNum = ''; //если в результате сложения число двузначное, то берем второе число и записываем на эту позицию
var nextPos = 0; //и запоминаем единицу в будущем
for (var i = longNumber1.length - 1; i >= 0; i--) {
if (Number(longNumber1[i]) + Number(longNumber2[i]) + nextPos < 10) {
str = Number(longNumber1[i]) + Number(longNumber2[i]) + nextPos + str;
nextPos = 0;
} else {
twoNumbers = Number(longNumber1[i]) + Number(longNumber2[i]) + nextPos;
currentNum = (String(twoNumbers).slice(1, 2)); //берем вторую цифру двузначного числа
str = currentNum + str;
nextPos = 1; //т.к число двузначное то мы должны прибавить единицу к след.цифре
}
}
if (nextPos) { str = '1' + str; }
console.log(longNumber1);
console.log(longNumber2);
console.log(str);
function sum(a, b) {
a = [...a].reverse()
b = [...b].reverse()
for (var q=0; q<b.length; ++q) {
if ((a[q] = ~~a[q] + ~~b[q]) > 9) {
a[q] -= 10
b[q+1] = ~~b[q+1] + 1
}
}
return a.reverse().join("")
}
console.log(sum("999", "999"))
console.log(sum("9", "999"))
console.log(sum("999", "9"))
var a = "536425458245238754832461239874613469012"
var b = "908435378596458490"
console.log(sum(a, b))
console.log(sum(b, a))
console.log(BigInt(a) + BigInt(b) + "")
Ещё один сумматор положительных чисел - на любое количество аргументов, заданных в виде строки или числа
function sum() {
let result = [];
let mind = 0;
let arr = [...arguments].map(a => [...a + ""].reverse());
let length = arr.reduce((s, a) => s > a.length ? s : a.length, 0);
for (let i = 0; i < length; i++) {
let digits = arr.map(num => (+num[i]) | 0);
let value = digits.reduce((sum, digit) => digit + sum, 0) + mind;
mind = value / 10 | 0;
result.push((value % 10) + "");
}
return ((mind || "") + result.reverse().join("")) || 0;
}
console.log(sum());
console.log(sum(123));
console.log(sum(123, '8933', 12345));
var a1 = '923456789012345678901234567890';
var a2 = '9876598765';
console.log(a1, '+', a2, '=');
console.log(sum(a1, a2));
console.log(sum(a2, a2, a2, a2, a2, a2, a2, a2, a2, a2, a2, a2));
console.log((+a2) * 12);
function sum(a, b) {
var n = Math.max(a.length, b.length)
a = a.padStart(n, 0)
b = b.padStart(n, 0)
var res = Array(n), d = 0
for (var q=n-1; ~q; --q) {
if ((res[q] = d + +a[q] + +b[q]) > 9) {
d = 1, res[q] -= 10;
} else {
d = 0
}
}
if (d) {
res.unshift(1)
}
return res.join("")
}
console.log(sum("999", "999"))
console.log(sum("9", "999"))
console.log(sum("999", "9"))
var a = "536425458245238754832461239874613469012"
var b = "908435378596458490"
console.log(sum(a, b))
console.log(BigInt(a) + BigInt(b) + "")
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Я делаю словарь русского языка в виде аккордеона, где каждое слово в своей ячейке
Как сделать чтобы сова была в 2 раза меньше?Нужно чтобы только сова стала в 2 раза меньше а все остальные элементы оставались без изменения