Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
1 / 1 / 0
Регистрация: 10.02.2016
Сообщений: 43

Найдите ошибку в программе складывания в столбиком двух чисел

24.03.2016, 23:19. Показов 2216. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Неправильное сложение
(Время: 1 сек. Память: 16 Мб Сложность: 41%)
Володя написал программу, которая складывает в столбик два числа. К сожалению, он не разобрался, как правильно переносить единицу из одного разряда в следующий. Поэтому программа стала выполняться следующим образом. Сначала она складывает последние цифры обоих чисел и записывает результат, как в случае, если он однозначный, так и в случае, если он двузначный. Затем программа складывает предпоследние цифры обоих чисел и результат сложения приписывает слева к результату предыдущего сложения. Далее процесс повторяется для всех разрядов. Если в одном числе цифр меньше, чем в другом, то программа размещает нули в соответствующих разрядах более короткого числа.

Федя хочет доказать Володе, что его способ сложения не обладает свойством ассоциативности. В частности, Федя утверждает, что существуют три числа, для которых важен порядок, в котором их складывают (при этом разрешается складывать числа в любом порядке, например можно сначала сложить первое число и последнее, а затем прибавить к ним среднее). Федя привел даже пример трех таких чисел.

Требуется написать программу, которая поможет Феде и Володе определить, верно ли утверждение, что, складывая заданные три числа в разном порядке, можно получить разные суммы.

Входные данные

Входной файл INPUT.TXT содержит в одной строке три целых числа a, b и c (1 ≤ a, b, c ≤ 106). Все числа в строке разделены пробелом.

Выходные данные

В первую строку выходного файла OUTPUT.TXT необходимо вывести слово YES, если данные три числа можно сложить разными способами и получить разные суммы. В противном случае, необходимо вывести слово NO.

В последующих строках необходимо вывести все возможные суммы, которые можно получить, складывая числа a, b и c. Суммы следует выводить по одной на строке и в порядке их возрастания.

Примеры

C++
1
2
3
4
5
6
7
№ INPUT.TXT          OUTPUT.TXT
1   30 239 566         YES
                               7945
                               71215
 
2      643 733 553  NO
                                18129

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#include <iostream>
#include<vector>
#include<string>
#include<math.h>
#include<cmath>
#include<algorithm>
using namespace std;
vector<int> null(vector<int>a, vector<int>b)
{
    int max1 = max(a.size(), b.size());
        for (int i = 0; i < max1; i++)
        {
            if (a.size() - 1 < i)
            {
                a.push_back(0);
            }
        }
        return a;
}
vector<int> razdel(vector<int>a, vector<int>a1)
{
    for (int i = 0; i <a.size(); i++)
    {
        if (a[i] == 0)
        {
            a1.push_back(0);
        }
        while (a[i] != 0)
        {
            a1.push_back(a[i] % 10);
            a[i] = a[i] / 10;
        }
    }
    return a1;
}
int sum1(vector<int>a, vector<int>b, int max1)
{
    a = null(a, b);
    b = null(b, a);
    int sum = 0, g = 1;
    vector<int>f;
    for (int i = 0; i < max1; i++)
    {
        a[i] += b[i];
    }
    f = razdel(a, f);
    for (int i = 0; i < f.size(); i++)
    {
        sum += f[i] * g;
        g = g * 10;
    }
    return sum;
}
int main()
{
    string a, b, c;
    vector<int>a1, b1, c1, k, y, o;
    cin >> a >> b >> c;
    for (int i = 0; i < a.length(); i++)
    {
        a1.push_back(a[i] - 48);
    }
    for (int i = 0; i < b.length(); i++)
    {
        b1.push_back(b[i] - 48);
    }
    for (int i = 0; i < c.length(); i++)
    {
        c1.push_back(c[i] - 48);
    }
    int max1 = max(max(a1.size(), b1.size()), c1.size());
    reverse(a1.begin(), a1.end());
    reverse(b1.begin(), b1.end());
    reverse(c1.begin(), c1.end());
    for (int i = 0; i < max1; i++)
    {
        if (a1.size() - 1 < i)
        {
            a1.push_back(0);
        }
        if (b1.size() - 1 < i)
        {
            b1.push_back(0);
        }
        if (c1.size() - 1 < i)
        {
            c1.push_back(0);
        }
    }
    vector<int>k1, y1, o1, a2, b2, c2;
    int u = 1, ch = 0;
    for (int i = 0; i < max1; i++)
    {
        k.push_back(b1[i] + c1[i]);
    }
    for (int i = 0; i < max1; i++)
    {
        y.push_back(a1[i] + b1[i]);
    }
    for (int i = 0; i < max1; i++)
    {
        o.push_back(a1[i] + c1[i]);
    }
    k1 = razdel(k, k1);
    y1 = razdel(y, y1);
    o1 = razdel(o, o1);
    a2 = razdel(a1, a2);
    b2 = razdel(b1, b2);
    c2 = razdel(c1, c2);
    int suma, sumb, sumc;
    suma = sum1(k1, a2, max1);
    sumb = sum1(y1, c2, max1);
    sumc = sum1(o1, b2, max1);
    vector<int>v,v1;
    v.push_back(suma);
    v.push_back(sumb);
    v.push_back(sumc);
    int l;
    for (int i = 0; i < v.size(); i++)
    {
        if (v[i] != -98)
        {
            for (int j = 0; j < v.size() && j != i; j++)
            {
                if (v[j] == v[i])
                {
                    v[j] = -98;
                }
            }
        }
    }
    for (int i = 0; i < v.size(); i++)
    {
        if (v[i] != -98)
        {
            v1.push_back(v[i]);
        }
    }
    sort(v1.begin(), v1.end());
    if (v1.size() <= 1)
    {
        cout << "NO" << endl;
        for (int i = 0; i < v1.size(); i++)
    {
        cout<<v1[i] << endl;
    }
        
    }
    if (v1.size() > 1)
    {
        cout << "YES"<<endl;
        for (int i = 0; i < v1.size(); i++)
        {
            cout << v1[i] << endl;
        }
    }
    
    
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.03.2016, 23:19
Ответы с готовыми решениями:

Не могу найти ошибку в программе(для просмотра картинок):кнопка НАЗАД не работает(не становится активной) Найдите ошибку.

Деление столбиком двух чисел
Просто поделить два произвольно больших числа - вывести целую часть и остачу. Буду очень благодарен за любую помощь:) Казалось бы очень...

Деление столбиком двух введенных натуральных чисел
Привет,помогите с программой, она должна изображать на экране монитора деление столбиком двух введенных натуральных чисел.

1
55 / 56 / 34
Регистрация: 29.12.2012
Сообщений: 478
24.03.2016, 23:33
Капец много векторов а не проше было часть функциональностей переложить на переменные
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.03.2016, 23:33
Помогаю со студенческими работами здесь

Сложение двух чисел(строкового типа) столбиком
Добрый вечер! Мне надо написать Функцию для сложения методом столбика двух строк. Вариантов вообще нет, потому что не знаю как это...

Найдите ошибку в программе
Даны двумерные массивы. a, b,c Найти произведение и сумму элементов не выше главной диагонали. Program zad1; Type mas=array of...

Найдите ошибку в программе
Program Razlojeni_cisla; uses crt; var n,i,s,j:integer; procedure desc(j,s,k:integer); var i:integer; begin if (s=0) and...

Найдите ошибку в программе
procedure TForm1.Button1Click(Sender: TObject); var a,b,c,d: integer; function min(a,b:integer):integer; begin ...

Найдите ошибку в программе
Пожалуйста найдите ошибку в программе. Закрытие на крестик не работает. Microsoft Visual Studio 2012.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru