1 Востаннє редагувалося leofun01 (02.10.2019 22:17:54)

Тема: Допоможіть з завданням по довгій арифметиці ( помилка у моїй програмі)

#include <iostream>
#include <string>
int read_long(int *a) {
    std::string c;
    std::cin >> c;
    int num = -1;
    for(int i = c.size() - 1; i >= 0; i--) {
        num++;
        a[num] = c[i] - '0';
    }
    return c.size();
}
int sum(int *a, int *b, int *c, int size_a, int size_b) {
    int size = std::max(size_a, size_b);
    for(int i = 0; i < size; i++) {
        c[i] += a[i] + b[i]; // знаходимо суму останніх розрядів
        c[i + 1] += a[i] + b[i]; // якщо є розряд для переходу
        c[i + 1] /= 10; // відсікаємо розряд якщо є
        c[i] %= 10;
    }
    if(c[size] == 0) size--;
    return size;
}
int main() {
    int a[250], b[250], c[251];
    int size_a = read_long(a); // повертає довжину масива першого довгого числа, а також вводить в нього цифри довгого числа задом на перед
    int size_b = read_long(b); // теж саме з другим числом
    int kol = sum(a, b, c, size_a, size_b); // повертає довжину масива суми і сам масив
    for(int i = kol; i >= 0; i--) std::cout << c[i]; // виводить сам масив - суму з кінця
    return 0;
}

Дано два великих числа. Потрібно вивести їх суму. У самій програмі постарався докладно описати кожен крок. З одного боку, введення великих чисел правильний, але щось не так з функцією їх суми або висновком. Помилку знайти не зміг = (.

2

Re: Допоможіть з завданням по довгій арифметиці ( помилка у моїй програмі)

Будь ласка, додайте відступи, на код дивитися боляче.
І замість "щось не так" напишіть конкретно - на кшталт "вводжу 2 і 2, а суму виводить 5".
Ну і коментарі якісь незрозумілі, але то вже таке.

Подякували: leofun011

3

Re: Допоможіть з завданням по довгій арифметиці ( помилка у моїй програмі)

Скажіть, ви комп'ютерним перекладом користувалися? "введення правильний", "висновком"...
Ну ок. Якби замість "щось не так" ви написали "виводить якісь зайві символи, кожного разу нові", то одразу б стало зрозуміло, що  десь ви забуваєте почистити пам'ять. C цього не робить автоматично, треба вручну. І дійсно, ви виділяєте 3 масиви (по 4 байти на 1 цифру!) і не чистите їх. От і отримуєте в результаті те, що там було до ваших маніпуляцій. Тобто сміття.

    int a[250] = {0},
        b[250] = {0}, 
        c[251] = {0};

4

Re: Допоможіть з завданням по довгій арифметиці ( помилка у моїй програмі)

дякую!