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

Сложение столбиком. - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.74
mrReptiloid
 Аватар для mrReptiloid
309 / 172 / 8
Регистрация: 30.04.2011
Сообщений: 1,135
30.04.2011, 17:24     Сложение столбиком. #1
Привет всем!Я недавно начал изучать с++ и решил написать свою функцию сложения больших чисел т.е. длинную арифметику.Смысл не сложный.Мы считываем 2 числа в 2 строки в обратном порядке,получаем целочисленный тип каждого из них,складываем и записываем в 3 массив.Если результат выходит больше 9,то записываем в 3 строковую переменную <результат сложения>-10.И при следующем проходе цикла прибавляем единичку,которую записываем во флаговою переменную,а потом ее обнуляем.<-вот в этом и проблема,не хочет прибавлять эту флаговою переменную при следующем проходе цикла,ничего вообще ни прибавляет,а если изначально прибавлять к сложению единичку,то прибавляет к обеим слагаемым.Может что-то не так в цикле обратного отсета т.е. чтобы считывать с конца числа,как мы делаем это когда складываем в столбик..помогите.вот мой код:
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
#include <conio.h>
#include <stdio.h>
#include <iostream>
 
int main()
{
//Обьявляем три строковые переменные.
    char* str=(char*)malloc(5000);
    char* st=(char*)malloc(5000);
    char* s=(char*)malloc(5000);
    int sum;//Переменная для вычисления суммы.
    int x =0;//Переменная для цикла.
    int i;//Переменная для цикла.
    int str1;//Переменная целого типа для каждого элемента первого слагаемого.
    int flag=0;//Флаговая переменная,для перенесения единицы в старший десяток.
    int str2;//Переменная целого типа для каждого элемента второго слагаемого.
    scanf("%s", str);//Считываем первое число в 1 строку.
    scanf("%s", st);//Считываем второе число во 2 строку.
    //Определяем длину обеих строк и записываем это число в переменные.
    int sm = strlen(str);
    int sm2 = strlen(st);
    for (x = sm,flag; x > 0; x--) 
{
 
    str1=str[x]-'0';//Получаем целочисленный тип каждого элемента первой строки.
    str2=st[x]-'0';//Получаем целочисленный тип каждого элемента второй строки.
    sum=str1+str2+flag;//Складываем каждый элемент с конца.
    s[x] = sum + '0';//Записываем в каждый элемент третьего массива результат сложения sum.
    s[sm] = 0;
    flag=0;
    if(sum>9)//Если результат сложения каких либо двух элементов 2 слагаемых больше 9....
{
    flag=1;
 
    s[x] = sum-10 + '0';
    s[sm] = 0;
}
    }
        
printf ("Summa = %s", s);//Выводим результат.
_getch();
}
ps пишу в visual c++ 2008,хоть это не столь принципиально,но разница от билдера есть..
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mrReptiloid
 Аватар для mrReptiloid
309 / 172 / 8
Регистрация: 30.04.2011
Сообщений: 1,135
30.04.2011, 19:12  [ТС]     Сложение столбиком. #21
Ну а вообще как должно выглядить прибавление 1 к старшему разряду,как это в моем коде написать???
т.е. у нас если сумма будет выходить больше 9,то во флаговою переменн. мы запишем 1,и при следующкм проходе цикла надо добавть эту флаговою переменную к сумме,а потом обнулить???как это решается?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
30.04.2011, 19:14     Сложение столбиком. #22
Я дополнил свое предыдущее сообщение, там все написано=)
mrReptiloid
 Аватар для mrReptiloid
309 / 172 / 8
Регистрация: 30.04.2011
Сообщений: 1,135
30.04.2011, 19:16  [ТС]     Сложение столбиком. #23
я уже посмотрел а поподробнее можно что значит вот это
if (flag) printf("1");
printf ("%s",s);//Выводим результат.
и если складывать 19 и 11 всеравно выйдет 20 вместо 30(....
но спасибо=))))))
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
30.04.2011, 19:20     Сложение столбиком. #24
У меня выводит 30
о_О
Вы же в своем цикле увеличивали свой флаг, но делали это исключительно для инкремента следующего разряда. В последней итерации идет проверка нулевого элемента, и если он больше 9, то флаг увеличивался, но т.к. следующей итерации не было, то он не обнулялся. Таким образом, если флаг не равен нулю(что и означает (flag) ), то к числу необходимо приписать спереди 1.
P.S. сам не понял что написал, ну да ладно
mrReptiloid
 Аватар для mrReptiloid
309 / 172 / 8
Регистрация: 30.04.2011
Сообщений: 1,135
30.04.2011, 19:23  [ТС]     Сложение столбиком. #25
Цитата Сообщение от diagon Посмотреть сообщение
У меня выводит 30
о_О
Вы же в своем цикле увеличивали свой флаг, но делали это исключительно для инкремента следующего разряда. В последней итерации идет проверка нулевого элемента, и если он больше 9, то флаг увеличивался, но т.к. следующей итерации не было, то он не обнулялся. Таким образом, если флаг не равен нулю(что и означает (flag) ), то к числу необходимо приписать спереди 1.
P.S. сам не понял что написал, ну да ладно
тьфу!!!это я тупонул...забыл в условии написать flag=1;воот теперь все работает спасибо!!=)

Вы же в своем цикле увеличивали свой флаг, но делали это исключительно для инкремента следующего разряда. В последней итерации идет проверка нулевого элемента, и если он больше 9, то флаг увеличивался, но т.к. следующей итерации не было, то он не обнулялся. Таким образом, если флаг не равен нулю(что и означает (flag) ), то к числу необходимо приписать спереди 1.
блин,нифига не понял,а мне надо понять,так как если не пойму это задание не выполню следующее....да и вообще надо бы понять..
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
30.04.2011, 19:25     Сложение столбиком. #26
Лучше flag==1, все-таки, а то условие всегда выполняется будет=)
mrReptiloid
 Аватар для mrReptiloid
309 / 172 / 8
Регистрация: 30.04.2011
Сообщений: 1,135
30.04.2011, 19:26  [ТС]     Сложение столбиком. #27
эт,а литературы какой по этому нету????а то мне вот это вот надо бы понять...
Вы же в своем цикле увеличивали свой флаг, но делали это исключительно для инкремента следующего разряда. В последней итерации идет проверка нулевого элемента, и если он больше 9, то флаг увеличивался, но т.к. следующей итерации не было, то он не обнулялся. Таким образом, если флаг не равен нулю(что и означает (flag) ), то к числу необходимо приписать спереди 1.
Лучше flag==1, все-таки, а то условие всегда выполняется будет=)
гы а вот так уже не хочет...опять 20 вместо 30)))


я ведь только начал учится..
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
30.04.2011, 19:30     Сложение столбиком. #28
В общем если нулевой элемент был больше 9, то флаг увеличивался, а так как цикл больше не выполнялся, то флаг оставался равным одному и после цикла.
Например, 9+1, в массиве лежит 0. Но ведь должно получится 10, поэтому и прибавляем спереди еденичку. И это работает при любых числах.
В VC должен быть дебаггер, посмотрите что там не так выполняется...
Вообще вот область кода, которую я изменял, посмотрите, может, ошиблись где...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for (x = sm-1; x >= 0; x--)
{
 
    str1=str[x]-'0';//Получаем целочисленный тип каждого элемента первой строки.
    str2=st[x]-'0';//Получаем целочисленный тип каждого элемента второй строки.
    sum=str1+str2+flag;//Складываем каждый элемент с конца.
    s[x] = sum + '0';//Записываем в каждый элемент третьего массива результат сложения sum.
    flag=0;
    if(sum>9)//Если результат сложения каких либо двух элементов 2 слагаемых больше 9....
{
    flag=1;
 
    s[x] = s[x]-10;
    }
    }
    printf("Summa = ");
    if (flag) printf("1");
    printf ("%s",s);//Выводим результат.
mrReptiloid
 Аватар для mrReptiloid
309 / 172 / 8
Регистрация: 30.04.2011
Сообщений: 1,135
30.04.2011, 19:37  [ТС]     Сложение столбиком. #29
Блин,сейчас в новом проэкте проверил свой первый код он тоже нормально прибавляет...че за прикол??а раньше в старом проэкте не хотело работать правильно.
т.е. раньше в том коде при сложении 19 и 11 выходило 20 а сейчас в том же коде уже 30 выходит...о_О)значит я писал правильно...
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
30.04.2011, 19:38     Сложение столбиком. #30
Из литературы могу посоветовать этот сайт
http://********/article.asp?id_text=1329
Там же можно проверить, верно ли вы решили.
mrReptiloid
 Аватар для mrReptiloid
309 / 172 / 8
Регистрация: 30.04.2011
Сообщений: 1,135
30.04.2011, 19:52  [ТС]     Сложение столбиком. #31
Вообщем кому интересно вот решение во всей красе=)
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
#include <conio.h>
#include <stdio.h>
#include <iostream>
 
int main()
{
//Обьявляем три строковые переменные.
    char* str=(char*)malloc(5000);
    char* st=(char*)malloc(5000);
    char* s=(char*)malloc(5000);
    int sum;//Переменная для вычисления суммы.
    int x =0;//Переменная для цикла.
    int i;//Переменная для цикла.
    int str1;//Переменная целого типа для каждого элемента первого слагаемого.
    int flag=0;//Флаговая переменная,для перенесения единицы в старший десяток.
    int str2;//Переменная целого типа для каждого элемента второго слагаемого.
    printf("Enter the first  number->: ");
    scanf("%s", str);//Считываем первое число в 1 строку.
    printf("Enter the second number->: ");
    scanf("%s", st);//Считываем второе число во 2 строку.
    //Определяем длину обеих строк и записываем это число в переменные.
    int sm = strlen(str);
    int sm2 = strlen(st);
    for (x = sm-1,flag; x >= 0; x--) 
{
    str1=str[x]-'0';//Получаем целочисленный тип каждого элемента первой строки.
    str2=st[x]-'0';//Получаем целочисленный тип каждого элемента второй строки.
    sum=str1+str2+flag;//Складываем каждый элемент с конца.
    s[x] = sum + '0';//Записываем в каждый элемент третьего массива результат сложения sum.
    s[sm] = 0;
flag=0;
    if(sum>9)//Если результат сложения каких либо двух элементов 2 слагаемых больше 9....
{
    flag=1;
    s[x] -=10;
    s[sm] = 0;
}
    }
printf(" %s\n", str);
printf("+\n");
printf(" %s\n", st);
printf("----------------\n");
if (flag) printf("1");
printf ("%s",s);//Выводим результат.
_getch();
}
mrReptiloid
 Аватар для mrReptiloid
309 / 172 / 8
Регистрация: 30.04.2011
Сообщений: 1,135
02.05.2011, 22:52  [ТС]     Сложение столбиком. #32
А все-таки как работает єта твоя функция nol???дописывает нолики?Помогите разобратся если строки будут разной длины*?!
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
03.05.2011, 10:32     Сложение столбиком. #33
Да, дописывает меньшему числу нули в начало
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void nol(char * a,char * b){
    int i,c=strlen(a),d=strlen(b); 
    if (c>d){                   //если первая строка длинее
        for (i = d-1; i >=c-d; i--) //идем циклом с конца 2й строки.
                b[i+c-d]=b[i];  //перемещаем все число вправо на разницу между размерами строк
        for (i = 0; i < c-d; i++)  //идем циклом с начала до разницы между строк, т.е. до начала числа, которое мы сдвинули вправо
                b[i]='0'; //заполняем его нулями
    }
    else            //если длинее 2 строка, то по аналогии
    {
        for (i = c-1; i >=d-c; i--)   
            a[i-c+d]=a[i];
        for (i = 0; i < d-c; i++)
            a[i]='0';
    }
}
Вообще удобнее хранить числа в перевернутом виде, тогда можно просто пройтись циклом с конца наименьшей строки до конца наибольшей и заполнить это все нулями.
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
03.05.2011, 12:03     Сложение столбиком. #34
Все гораздо проще можно сделать:

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
Листинг 11.17. Класс «длинных» целых чисел
class LongLong
{   public:
    // Конструкторы
    LongLong(const string &s);          // инициализация строкой
    LongLong(const long &number=0);
// операции c с присваиванием
    LongLong& operator+=(const LongLong &r);
    LongLong& operator-=(const LongLong &r);
    LongLong& operator*=(const LongLong &r);
    LongLong& operator/=(const LongLong &r);
    LongLong& operator%=(const LongLong &r);
// операции без присваивания
    friend LongLong operator+(const LongLong &l, const LongLong &r);
    friend LongLong operator-(const LongLong &l, const LongLong &r);
    friend LongLong operator*(const LongLong &l, const LongLong &r);
    friend LongLong operator/(const LongLong &l, const LongLong &r);
    friend LongLong operator%(const LongLong &l, const LongLong &r);
// ввод – вывод
    friend istream& operator>>(istream &is, LongLong &r);
    friend ostream& operator<<(ostream &os, const LongLong &r);
private:
    vector<char> v;
};
Помимо приведенных дружественных операций можно добавить еще операции длинных чисел с целыми, например
C++
1
2
friend LongLong operator+(const LongLong &l, const long &r);
friend LongLong operator+(const long &l, const LongLong &r);
Само число находится в поле-контейнере. Каждая цифра — это один элемент вектора, младшая цифра расположена в контейнере по младшему индексу. Например, число 765 будет расположено так: v[0]=5,v[1]=6,v[2]=7.
Конструкторов всего два: конструктор копирования создается автоматически, а конструктор без аргументов нам просто не нужен, так как в конструкторе инициализации задан аргумент по умолчанию. Реализацию покажем на примере конструктора с аргументом-целым (листинг 11.18).
C++
1
2
3
4
5
6
7
8
9
10
Листинг 11.18. Конструктор инициализации длинного целого
LongLong::LongLong(const long &number)
{  long t = number, i = 0; 
   char digit;
   while(t>0)
   { digit = t % 10;
     v.push_back(digit);
     t/=10; i++;
   }
}
Операции с длинными числами, естественно, выполняются поэлементно. Покажем реализацию самого простого метода — сложения с присваиванием (листинг 11.19).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Листинг 11.19. Метод сложения с присваиванием
LongLong& LongLong::operator+=(const LongLong &r)
{ typedef vector<char>::size_type sizeT;
  sizeT size = (v.size()>r.v.size())?v.size():r.v.size();   // большая длина
  unsigned carry = 0, sumDigit;             // перенос и цифра суммы
  LongLong Summa;                           // результат-сумма
  for(sizeT i = 0; i < size; i++)
  { sumDigit = digit(i) + r.digit(i) + carry;
    carry = sumDigit/10;                    // вычисляем новый перенос
    Summa.v.push_back(sumDigit%10);         // добавляем цифру в сумму
  }
  if (carry) Summa.v.push_back(carry);      // добавляем последний перенос
  v = Summa.v;
  return *this;
}
Нам потребовалась вспомогательная функция digit(), которая выдает очередную цифру длинного целого. Функция очень проста и ее реализацию можно прописать непосредственно в приватной части класса:
C++
1
2
char digit(unsigned i) const
{ if(i<v.size()) return v[i]; else return 0; }
Ну, и наконец, реализация функции вывода тоже тривиальна:
C++
1
2
3
4
5
ostream& operator<<(ostream &os, const LongLong &r)
{ for(int i = 0; i < r.v.size(); i++)
  os << int(r.v[r.v.size()-i-1]);       // вывод в обратном порядке
  return os;
}
Единственный нюанс — это вывод цифр числа (элементов вектора) в обратном порядке, поскольку число в векторе «лежит» от младшей цифры к старшей, а читаем мы числа от старшей цифры к младшей.
Реализацию остальных методов оставляем читателю. Используйте для реализации дружественных функций уже реализованные операции с присваиванием, например
C++
1
2
LongLong operator+(const LongLong &l, const LongLong &r)
{ LongLong tmp = l; tmp+=r; return tmp; }
mrReptiloid
 Аватар для mrReptiloid
309 / 172 / 8
Регистрация: 30.04.2011
Сообщений: 1,135
03.05.2011, 16:14  [ТС]     Сложение столбиком. #35
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
// 0.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{
}
#include <conio.h>
#include <stdio.h>
#include <iostream>
 
int main()
{
//Обьявляем три строковые переменные.
    char* str=(char*)malloc(5000);
    char* st=(char*)malloc(5000);
    char* s=(char*)malloc(5000);
    int sum;//Переменная для вычисления суммы.
    int x =0;//Переменная для цикла.
    int i;//Переменная для цикла.
    int str1;//Переменная целого типа для каждого элемента первого слагаемого.
    int flag=0;//Флаговая переменная,для перенесения единицы в старший десяток.
    int str2;//Переменная целого типа для каждого элемента второго слагаемого.
    printf("Enter the first  number->: ");
    scanf("%s", str);//Считываем первое число в 1 строку.
    printf("Enter the second number->: ");
    scanf("%s", st);//Считываем второе число во 2 строку.
    //Определяем длину обеих строк и записываем это число в переменные.
    int sm = strlen(str);
    int sm2 = strlen(st);
    if(sm>sm2){
    for(i=sm2-1; i>=sm-sm2; i--)
    st[i+sm-sm2]=st[i];
    for (i = 0; i < sm-sm2; i++) 
    st[i]='0'; //заполняем его нулями
    }
    else if(sm2>sm)
    {
    for (i = sm-1; i >=sm2-sm; i--)   
            str[i-sm+sm2]=str[i];
    for (i = 0; i < sm2-sm; i++)
            str[i]='0';
    }
    for (x = sm-1,flag; x >= 0; x--) 
{
    str1=str[x]-'0';//Получаем целочисленный тип каждого элемента первой строки.
    str2=st[x]-'0';//Получаем целочисленный тип каждого элемента второй строки.
    sum=str1+str2+flag;//Складываем каждый элемент с конца.
    s[x] = sum + '0';//Записываем в каждый элемент третьего массива результат сложения sum.
    s[sm] = 0;
flag=0;
    if(sum>9)//Если результат сложения каких либо двух элементов 2 слагаемых больше 9....
{
    flag=1;
    s[x]-=10;
    s[sm] = 0;
}
    }
printf("Summa is ");
if (flag) printf("1");
printf ("%s",s);//Выводим результат.
_getch();
}
123 и 12 складывает,а другие не хочет.
я убрал функцию,так как функции еще не учил и задание без них было...ну это неважно..
Блин я считать разучился,123 и 12 складывает неправильно он к 1(в 12) прибавляет еще 1 т.е. складывает 123 и 22...а числа больше вообще не хочет..
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
03.05.2011, 16:34     Сложение столбиком. #36
Извиняюсь, криво скопировал..
C++
1
for(i=sm2-1; i>=sm-sm2; i--)
Правильно будет
C++
1
for(i=sm2-1; i>=0; i--)
Во 2 случае также
mrReptiloid
 Аватар для mrReptiloid
309 / 172 / 8
Регистрация: 30.04.2011
Сообщений: 1,135
04.05.2011, 19:20  [ТС]     Сложение столбиком. #37
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
// 09.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{
}
 
// 0.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>
 
int main()
{
//Обьявляем три строковые переменные.
    char* str=(char*)malloc(5000);
    char* st=(char*)malloc(5000);
    char* s=(char*)malloc(5000);
    int sum;//Переменная для вычисления суммы.
    int x =0;//Переменная для цикла.
    int i;//Переменная для цикла.
    int str1;//Переменная целого типа для каждого элемента первого слагаемого.
    int flag=0;//Флаговая переменная,для перенесения единицы в старший десяток.
    int str2;//Переменная целого типа для каждого элемента второго слагаемого.
    printf("Enter the first  number->: ");
    scanf("%s", str);//Считываем первое число в 1 строку.
    printf("Enter the second number->: ");
    scanf("%s", st);//Считываем второе число во 2 строку.
    //Определяем длину обеих строк и записываем эти числа в переменные sm и sm2.
    int sm = strlen(str);
    int sm2 = strlen(st);
        if(sm>sm2){//Если 1 длинее.
        for(i=sm2; i>=0; i--)//циклом проходтм с конца меньшей строки.
        st[i+sm-sm2]=st[i];//переместим число вправо на разницу между размерами 1 и 2 строки(от большего отнимаем меньшее)
        for (i = 0; i < sm-sm2; i++)//идем циклом от 0 т.е. от начала и до разницы на которую мы сдвинули меньшее число. 
        st[i]='0'; //заполняя нулями....
        }
        else if(sm2>sm)//если 2 длинее,аналогично....
    {
    for(i=sm; i>=0; i--) 
    str[i+sm2-sm]=str[i];
    for (i = 0; i < sm2-sm; i++)
    str[i]='0';
    }
    for (x = sm,flag; x >= 0; x--) 
{
    str1=str[x]-'0';//Получаем целочисленный тип каждого элемента первой строки.
    str2=st[x]-'0';//Получаем целочисленный тип каждого элемента второй строки.
    sum=str1+str2+flag;//Складываем каждый элемент с конца.
    s[x] = sum + '0';//Записываем в каждый элемент третьего массива результат сложения sum.
    s[sm] = 0;
flag=0;
    if(sum>9)//Если результат сложения каких либо двух элементов 2 слагаемых больше 9....
{
    flag=1;
    s[x]-=10;
    s[sm] = 0;
}
    }
 
printf("Summa is: ");
if (flag) printf("1");
printf ("%s",s);//Выводим результат.
_getch();
}
второй случай не пашет(
т.е. если сложить 12 и 123 выходит 13...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2011, 13:07     Сложение столбиком.
Еще ссылки по теме:

сложить столбиком два числа char C++
C++ Перемножение столбиком двух массивов char
Деление длинных чисел столбиком C++

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

Или воспользуйтесь поиском по форуму:
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
05.05.2011, 13:07     Сложение столбиком. #38
Во-первых убейте этот код-_-
C++
1
s[sm]=0
Ошибка из-за него
Во-вторых, у массива s нету конца строки. Т.е. ответ выведется правильно, но за ним последует довольно длинная последовательность мусора... Сделайте так
C++
1
s[strlen(st)]='\0';
После добавления строк их длина изменилась, а вы используете старые переменные... В строке 51 исправьте на
C++
1
for (x = strlen(st)-1,flag; x >= 0; x--)
Yandex
Объявления
05.05.2011, 13:07     Сложение столбиком.
Ответ Создать тему
Опции темы

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