План курса / Все задачи / Алгоритмы и структуры данных
Умножение длинного числа
средне
# решено
Дан массив чисел nums, представляющий собой число, записанное в обратном порядке. Также дано число n (1 ≤ n ≤ 9). Необходимо умножить nums на число n в столбик и вернуть в качестве результата изменённый массив nums.
nums не содержит ведущих нулей, кроме случая числа 0 ([0])
1 ≤ n ≤ 9
public class Solution {
public static List<int> Multiply(List<int> nums, int n) {
int carry = 0;
int i = 0;
while (i < nums.Count || carry > 0) {
// Получаем текущую цифру или 0, если индекс вне массива
int currentDigit = i < nums.Count ? nums[i] : 0;
carry += currentDigit * n;
if (i < nums.Count) {
// Обновляем текущую цифру
nums[i] = carry % 10;
} else {
// Добавляем новую цифру
nums.Add(carry % 10);
}
// Обновляем перенос
carry /= 10;
i++;
}
return nums;
}
}
#include <vector>
using namespace std;
vector<int> multiply(vector<int>& nums, int n) {
int carry = 0;
int i = 0;
while (i < nums.size() || carry) {
// Получаем текущую цифру или 0, если индекс вне массива
int currentDigit = (i < nums.size()) ? nums[i] : 0;
carry += currentDigit * n;
if (i < nums.size()) {
// Обновляем текущую цифру
nums[i] = carry % 10;
} else {
// Добавляем новую цифру
nums.push_back(carry % 10);
}
// Обновляем перенос
carry /= 10;
i++;
}
return nums;
}
package main
func multiply(nums []int, n int) []int {
carry := 0
i := 0
for i < len(nums) || carry > 0 {
// Получаем текущую цифру или 0, если индекс вне массива
currentDigit := 0
if i < len(nums) {
currentDigit = nums[i]
}
carry += currentDigit * n
if i < len(nums) {
// Обновляем текущую цифру
nums[i] = carry % 10
} else {
// Добавляем новую цифру
nums = append(nums, carry%10)
}
// Обновляем перенос
carry /= 10
i++
}
return nums
}
import java.util.*;
public class Solution {
public List<Integer> multiply(List<Integer> nums, int n) {
int carry = 0;
int i = 0;
while (i < nums.size() || carry > 0) {
// Получаем текущую цифру или 0, если индекс вне массива
int currentDigit = i < nums.size() ? nums.get(i) : 0;
carry += currentDigit * n;
if (i < nums.size()) {
// Обновляем текущую цифру
nums.set(i, carry % 10);
} else {
// Добавляем новую цифру
nums.add(carry % 10);
}
// Обновляем перенос
carry /= 10;
i++;
}
return nums;
}
}
from typing import *
def multiply(nums: List[int], n: int) -> List[int]:
carry = 0
i = 0
while i < len(nums) or carry:
# Получаем текущую цифру или 0, если индекс вне массива
current_digit = nums[i] if i < len(nums) else 0
carry += current_digit * n
if i < len(nums):
# Обновляем текущую цифру
nums[i] = carry % 10
else:
# Добавляем новую цифру
nums.append(carry % 10)
# Обновляем перенос
carry //= 10
i += 1
return nums
/**
* @param {number[]} nums
* @param {number} n
* @returns {number[]}
*/
export function multiply(nums, n) {
let carry = 0;
let i = 0;
while (i < nums.length || carry > 0) {
// Получаем текущую цифру или 0, если индекс вне массива
const currentDigit = i < nums.length ? nums[i] : 0;
carry += currentDigit * n;
if (i < nums.length) {
// Обновляем текущую цифру
nums[i] = carry % 10;
} else {
// Добавляем новую цифру
nums.push(carry % 10);
}
// Обновляем перенос
carry = Math.floor(carry / 10);
i++;
}
return nums;
}