Решение задачи Неправильное сложение с Acmp

Без пояснения   Просмотров: 106


Володя написал программу, которая складывает в столбик два числа. К сожалению, он не разобрался, как правильно переносить единицу из одного разряда в следующий. Поэтому программа стала выполняться следующим образом. Сначала она складывает последние цифры обоих чисел и записывает результат, как в случае, если он однозначный, так и в случае, если он двузначный. Затем программа складывает предпоследние цифры обоих чисел и результат сложения приписывает слева к результату предыдущего сложения. Далее процесс повторяется для всех разрядов. Если в одном числе цифр меньше, чем в другом, то программа размещает нули в соответствующих разрядах более короткого числа.

Код

#include <bits/stdc++.h>

using namespace std;

string func(string a, string b, string c)
{
    string res = "", res1 = "";
    if(a.size() < b.size())
        swap(a, b);
    if(a.size() > b.size())
        b.insert(0, a.size() - b.size(), '0');
    for(int i = a.size() - 1; i >= 0; --i){
        int s = int(a[i]) + int(b[i]) - 96;
        string ss = to_string(s);
        reverse(ss.begin(), ss.end());
        res += ss;
    }
    reverse(res.begin(), res.end());

    if(res.size() < c.size())
        swap(res, c);
    if(res.size() > c.size())
        c.insert(0, res.size() - c.size(), '0');

    for(int i = res.size() - 1; i >= 0; --i){
        int s = int(res[i]) + int(c[i]) - 96;
        string ss = to_string(s);
        reverse(ss.begin(), ss.end());
        res1 += ss;
    }
    reverse(res1.begin(), res1.end());
    return res1;
}
int main()
{
    string a, b, c;
    cin >> a >> b >> c;
    set<string> ss;
    ss.insert(func(a, b, c));
    ss.insert(func(c, a, b));
    ss.insert(func(b, c, a));
    vector<string> s;
    for(auto i: ss)
        s.push_back(i);

    for(int i = 0; i < s.size(); ++i){
        for(int j = i + 1; j < s.size(); ++j)
            if(s[i].size() > s[j].size())
                swap(s[i], s[j]);
    }

    if(s.size() == 1)
        cout << "NO";
    else
        cout << "YES";
    cout << endl;
    for(auto i: s)
        cout << i << endl;
    return 0;
}

         

Администратор Photo Автор: Администратор



Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться