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

Сложение числа через классы - C++

Восстановить пароль Регистрация
 
Argos
1 / 1 / 0
Регистрация: 14.01.2011
Сообщений: 82
22.02.2012, 13:29     Сложение числа через классы #1
Надо сложить два больших числа.
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
#include "iostream"
#include "stdio.h"
#include "conio.h"
using namespace std;
 
int L=0;
 
class Fib
{
    int *M;
public:
    Fib() 
    {
        M=new int [100000];
        memset(M,NULL,sizeof M);
    }
    ~Fib()
    {
        delete [] M;
    }
    void show()
    {
        for(int i=L;i>=0;i--)
            cout << M[i];
        cout << "\n";
    }
    void Pr()
    {
        printf("%i",M[0]);
    }
    void pr(int n)
    {
        M[0]=n;
    }
    Fib operator + (Fib O)
    {
        int K=0;
        for(int i=0;i<=L;i++)
        {
            O.M[i]=O.M[i]+M[i]+K;
            if(O.M[L]>=10) L++;
            if(O.M[i]>=10) {O.M[i]-=10; K=1;}
            else K=0;
        }
        return O;
    }
};
 
int main()
{
    Fib A, B, C;
    A.pr(1);
    B.pr(1);
    C=A+B;
    C.show();
    getch();
}
Не могу понять почему находится мусор в С
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2012, 13:29     Сложение числа через классы
Посмотрите здесь:

Сложение 2-х чисел, классы... C++
C++ Классы, конструктор, сложение двух матриц
сложение Элементов числа, шахматная доска, счастливые числа))) C++
Операция вычитания через сложение C++
Сложение матриц(классы) C++
C++ Классы. Вывести значение числа цифр в дробной части числа
Исключить из числа цифры, стоящие между первой и последней цифрой числа. Использовать классы C++
Простые Классы (сложение чисел в восьмеричной системе) C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Luke
37 / 37 / 1
Регистрация: 21.02.2012
Сообщений: 95
22.02.2012, 13:37     Сложение числа через классы #2
Argos, первое что надо сделать это во всех циклах заменить <= на < и >= на >.
иначе выйдя за границы в ту или иную сторону можно черпнуть мусор из памяти

второе переменная L она равна 0
int L=0;
Добавлено через 2 минуты
Цитата Сообщение от Argos Посмотреть сообщение
for(int i=0;i<=L;i++)
* * * * * * * * {
* * * * * * * * * * * * O.M[i]=O.M[i]+M[i]+K;
* * * * * * * * * * * * if(O.M[L]>=10) L++;
* * * * * * * * * * * * if(O.M[i]>=10) {O.M[i]-=10; K=1;}
* * * * * * * * * * * * else K=0;
* * * * * * * * }
тут поясни логику. цикл должен выполняться пока i<=L но L у тебя ==0 и может увеличится неожиданно в теле цикла.

правильно будет задать L значение длины и выполнять цикл так

C++
1
for(int i=0;i<L;i++)
без изменения L внутри цикла
Argos
1 / 1 / 0
Регистрация: 14.01.2011
Сообщений: 82
22.02.2012, 13:47  [ТС]     Сложение числа через классы #3
Цитата Сообщение от Luke Посмотреть сообщение
C++
1
2
3
4
5
6
7
for(int i=0;i<=L;i++)
* * * * * * * * {
* * * * * * * * * * * * O.M[i]=O.M[i]+M[i]+K;
* * * * * * * * * * * * if(O.M[L]>=10) L++;
* * * * * * * * * * * * if(O.M[i]>=10) {O.M[i]-=10; K=1;}
* * * * * * * * * * * * else K=0;
* * * * * * * * }
тут поясни логику. цикл должен выполняться пока i<L но L у тебя ==0 и может увеличится неожиданно в теле цикла.
Например 9+9=18
но у нас может в одной ячейки массива М находится число >=9 поэтому делаем L++ которая увеличивает количество ячеек. В итоге получаем в одной ячейки памяти 1 в другой 8

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int p=0;
int l=0;
int M1[1000]={NULL}, M2[1000]={NULL},M3[1000]={NULL};
for(int i=0;i<=l;i++)
{
    M3[i]=p+M2[i]+M1[i];
    if(M3[l]>=10)
        l++;
    if(M3[i]>=10)
    {
        M3[i]-=10;
        p=1;
    }
    else
            p=0;
}
Код работает. Проверял
Yandex
Объявления
22.02.2012, 13:47     Сложение числа через классы
Ответ Создать тему
Опции темы

Текущее время: 20:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru