Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
user-men
22 / 22 / 8
Регистрация: 17.02.2014
Сообщений: 307
#1

Ошибка при умножении - C++

13.03.2014, 22:38. Просмотров 250. Ответов 1
Метки нет (Все метки)

Возникла проблема не понимаю почему при умножении 567 * 900 = 50103, (программа недробляна поэтому можно только умножать одинаковые цифры по количеству)

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
void Multiplication_Of_Numbers()
{
    int i = 0,j,o=0,tum=0,k0=0,sum;
    while (number.x>0)
    {
         number.mas[i++] = number.x % 10;number.x /= 10;
    }
    int k = 0,t=0;
    while (number.y>0)
    {
        in.mas[k++] = number.y % 10; number.y /= 10;
    }
 
     //cout <<"k"<< k<<endl;
    //cout << in.mas[2];
 
    for (j = 0; j < k; j++)
    {
    
        //cout << in.mas[j] << "\n";
        t = 0;
        for (int p = 0; p < i; p++,t++)
            {
 
        if(in.mas[j]==0)
        {
            goto fx;
        }
 
 
            if (p == k-1)
            {
                number.Multiplying_The_Amount[o++] = (in.mas[j] * number.mas[p]) + tum;
                tum = 0;
                k0 = 0;
                goto fx;
            }
 
 
 
            if (in.mas[j] * number.mas[p]>=10)
               {
 
                sum = in.mas[j] * number.mas[p];
 
                while (sum >= 10)
                {
                    k0 = k0 + 1;
                        sum=sum - 10;
 
                }
 
 
 
 
                number.Multiplying_The_Amount[o++] = ((in.mas[j] * number.mas[p]) - (k0*10)) + tum;
 
                tum = k0;
                k0 = 0;
               }
            else
            {
                number.Multiplying_The_Amount[o++] = (in.mas[j] * number.mas[p]) + tum;
                tum = 0;
            }
        fx:;
            
 
            }
        i = t;  
    }
 
    k0 = 0;
    for (j = 0; j < o; j++)
    {
        number.conversely[k0]=number.Multiplying_The_Amount[j]; 
        k0 = k0 + 1;
        if (k0 == k)
        {
            do
            {
                cout << number.conversely[k0-1];
                k0 = k0 - 1;
            } while (k0 != 0);
 
 
            cout <<"\n";
 
        }
    }
Программа

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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
//Calculator
#include<iostream>
#include<conio.h>
 
using namespace std;
struct XY
{
    int x;
    int y;
    int zri;
    int sum;
    int Multiplying_The_Amount[25];
    int mas[5];
    int conversely[15];
    char z;
    char n[4];
}number, in;
 
void Add_Numbers();
void Subtract_Numbers();
void Multiplication_Of_Numbers();
void n();
 
void Input_Output()
{
    cout << "Calculator\n";
    cin >> number.x >> number.z >> number.y;
    //system("cls");
}
 
int main(void)
{
    Input_Output();
    switch (number.z)
    {
    case '+':Add_Numbers(); break;
    case '-':Subtract_Numbers(); break;
    case '*':Multiplication_Of_Numbers(); break;
    }
    _getch();
}
 
void Add_Numbers()
{
    number.sum = number.x + number.y;
    if (number.x < number.y)
    {
        number.zri = number.x;
        in.sum = number.y - number.x;
    }
    else
    {
        number.zri = number.y;
        in.sum = number.x - number.y;
    }
 
    n();
    if (number.x<number.y)
        cout << number.z << in.n << number.x << "\n " << number.y << "\n " << number.n << " \n " << number.sum;
    if (number.x>number.y)
        cout << number.z << number.x << "\n " << in.n << number.y << "\n " << number.n << " \n " << number.sum;
}
 
void Subtract_Numbers()
{
    number.sum = number.x - number.y;
 
    if (number.sum<0)
    {
        exit(0);
    }
 
    if (number.x < number.y)
    {
        number.zri = number.x;
        in.sum = number.y - number.x;
    }
    else
    {
        number.zri = number.y;
        in.sum = number.x - number.y;
    }
 
    n();
    if (number.x<number.y)
        cout << number.z << in.n << number.x << "\n " << number.y << "\n " << number.n << " \n " << number.sum;
    if (number.x>number.y)
        cout << number.z << number.x << "\n " << in.n << number.y << "\n " << number.n << " \n " << number.sum;
}
 
void Multiplication_Of_Numbers()
{
    int i = 0,j,o=0,tum=0,k0=0,sum;
    while (number.x>0)
    {
         number.mas[i++] = number.x % 10;number.x /= 10;
    }
    int k = 0,t=0;
    while (number.y>0)
    {
        in.mas[k++] = number.y % 10; number.y /= 10;
    }
 
     //cout <<"k"<< k<<endl;
    //cout << in.mas[2];
 
    for (j = 0; j < k; j++)
    {
    
        //cout << in.mas[j] << "\n";
        t = 0;
        for (int p = 0; p < i; p++,t++)
            {
 
        if(in.mas[j]==0)
        {
            goto fx;
        }
 
 
            if (p == k-1)
            {
                number.Multiplying_The_Amount[o++] = (in.mas[j] * number.mas[p]) + tum;
                tum = 0;
                k0 = 0;
                goto fx;
            }
 
 
 
            if (in.mas[j] * number.mas[p]>=10)
               {
 
                sum = in.mas[j] * number.mas[p];
 
                while (sum >= 10)
                {
                    k0 = k0 + 1;
                        sum=sum - 10;
 
                }
 
 
 
 
                number.Multiplying_The_Amount[o++] = ((in.mas[j] * number.mas[p]) - (k0*10)) + tum;
 
                tum = k0;
                k0 = 0;
               }
            else
            {
                number.Multiplying_The_Amount[o++] = (in.mas[j] * number.mas[p]) + tum;
                tum = 0;
            }
        fx:;
            
 
            }
        i = t;  
    }
 
    k0 = 0;
    for (j = 0; j < o; j++)
    {
        number.conversely[k0]=number.Multiplying_The_Amount[j]; 
        k0 = k0 + 1;
        if (k0 == k)
        {
            do
            {
                cout << number.conversely[k0-1];
                k0 = k0 - 1;
            } while (k0 != 0);
 
 
            cout <<"\n";
 
        }
    }
 
 
 
    /*for (j = o-1; j >-1; j--)
    {
        cout << number.Multiplying_The_Amount[j];
        k0 = k0 + 1;
        if (k0 == k)
        {
            cout<<"\n";
            k0 = 0;
        }
        
    }*/
}
 
 
 
 
 
void n()
{
    if (number.sum < 9 && number.sum >0)
    {
        number.n[0] = '_';
    }
    if (number.sum < 99 && number.sum>9)
    {
        number.n[0] = '_';
        number.n[1] = '_';
    }
    if (number.sum < 999 && number.sum>99)
    {
        number.n[0] = '_';
        number.n[1] = '_';
        number.n[2] = '_';
    }
    if (number.sum < 9999 && number.sum>999)
    {
        number.n[0] = '_';
        number.n[1] = '_';
        number.n[2] = '_';
        number.n[3] = '_';
    }
    if (number.sum < 99999 && number.sum>9999)
    {
        number.n[0] = '_';
        number.n[1] = '_';
        number.n[2] = '_';
        number.n[3] = '_';
        number.n[4] = '_';
    }
 
    ///////////////////////////////////////////
 
    if (number.zri < 9 && number.zri >0)
    {
        if (in.sum < 99 && in.sum>9)
        {
            in.n[0] = ' ';
        }
        if (in.sum < 999 && in.sum>99)
        {
            in.n[0] = ' ';
            in.n[1] = ' ';
        }
        if (in.sum < 9999 && in.sum>999)
        {
            in.n[0] = ' ';
            in.n[1] = ' ';
            in.n[2] = ' ';
        }
        if (in.sum < 99999 && in.sum>9999)
        {
            in.n[0] = ' ';
            in.n[1] = ' ';
            in.n[2] = ' ';
            in.n[3] = ' ';
        }
    }
 
    if (number.zri < 99 && number.zri >9)
    {
        if (in.sum < 999 && in.sum>99)
        {
            in.n[0] = ' ';
        }
        if (in.sum < 9999 && in.sum>999)
        {
            in.n[0] = ' ';
            in.n[1] = ' ';
        }
        if (in.sum < 99999 && in.sum>9999)
        {
            in.n[0] = ' ';
            in.n[1] = ' ';
            in.n[2] = ' ';
        }
    }
 
    if (number.zri < 999 && number.zri >99)
    {
        if (in.sum < 9999 && in.sum>999)
        {
            in.n[0] = ' ';
        }
        if (in.sum < 99999 && in.sum>9999)
        {
            in.n[0] = ' ';
            in.n[1] = ' ';
        }
    }
 
    if (number.zri < 9999 && number.zri >999)
    {
        in.n[0] = ' ';
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2014, 22:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при умножении (C++):

Найти все двузначные числа, которые при умножении на 2 заканчиваются на 8, а при умножении на 3 - на 4. - C++
Привет мозги, нужно решить задачу по Си++. Найти все двузначные числа, которые при умножении на 2 заканчиваются на 8, а при умножении на 3...

Ошибка при умножении - C++
Надо найти: Произведение элементов массива, расположенных между максимальным и минимальным элементами. Min и Max находит программа а вот...

Проверить ассоциативность при умножении матриц - C++
Делаю лабораторную с дискретной математики. Нужно проверить ассоциативность при умножении матриц. То есть в моем случае: M1* M2 =...

Почему при умножении на 0, программа работает правильно? - C++
Операции ввода, такие, как cin, должны уметь преобразовывать последо- вательность символов в число. Напишите программу, которая позволяет...

Неверный результат при умножении двух матриц - C++
Здравствуйте. Проблема возникла, не могу понять что я сделал не так при умножении матриц, результат постоянно выглядит примерно вот так: ...

Неверное значение при умножении больших чисел - C++
Добрый день, столкнулся с такой вещью: Понадобилось умножить 30000*30000*30000, проверил через диапазоны типов данных, long long...

1
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
13.03.2014, 23:13 #2
Ну и код, а на оборот результат смотрели? 900 * 567= ????

Добавлено через 12 минут
Пересмотрите подход (упростите) избавьтесь от goto!!! А то этот код (по-крайне мере мне) действительно без бумаги не разобрать: прикидывая что-куда идет вручную

Добавлено через 10 минут

Не по теме:

Вот посмотрите на досуге Объясните мне, что же такого плохого в goto?

1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2014, 23:13
Привет! Вот еще темы с ответами:

Не могу найти ошибку при умножении 2х матриц - C++
Доброго времени суток! Помогите найти ошибку в матрице, который час сижу и не могу найти. При умножении 2х матриц правильно выводится...

При умножении матриц результат равен нулю - C++
При умножении матриц мне вместо нормального ответа выводит нули, почему? помогите плиз... #include &lt;iostream.h&gt; #include &lt;math.h&gt; ...

Исправить ошибку из-за которой приложение падает при умножении матриц - C++
Привет прогеры! Объясните обезьяне почему у меня кидает exeption программа при перемножении матриц. Размеры матриц всего 1000 на 1000 и...

Почему при умножении двух переменных типа int выдает ответ 76? - C++
Помогите понять, почему при x*y выдает ответ 76? :wall: Откуда взялись эти числа? #include &lt;iostream&gt; using namespace std; ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru