Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/55: Рейтинг темы: голосов - 55, средняя оценка - 4.69
 Аватар для mrReptiloid
313 / 176 / 25
Регистрация: 30.04.2011
Сообщений: 1,469

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

30.04.2011, 17:24. Показов 11310. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем!Я недавно начал изучать с++ и решил написать свою функцию сложения больших чисел т.е. длинную арифметику.Смысл не сложный.Мы считываем 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,хоть это не столь принципиально,но разница от билдера есть..
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.04.2011, 17:24
Ответы с готовыми решениями:

Сложение столбиком
Необходимо реализовать сложение столбиком.Длинная арифметика так сказать. Вроде понимаю как.но вот проблема.а как сделать так чтобы...

Вычеслить столбиком
Вычеслить Сталбиком следующие числа 2,2, 2,4, 2,6, ..., 4,2.

Калькулятор. Деление столбиком
Помогите решить проблему с делением длинных чисел в столбик. Конкретно , не понимаю как программно написать &quot;отщипывание&quot; у...

37
 Аватар для mrReptiloid
313 / 176 / 25
Регистрация: 30.04.2011
Сообщений: 1,469
30.04.2011, 19:12  [ТС]
Студворк — интернет-сервис помощи студентам
Ну а вообще как должно выглядить прибавление 1 к старшему разряду,как это в моем коде написать???
т.е. у нас если сумма будет выходить больше 9,то во флаговою переменн. мы запишем 1,и при следующкм проходе цикла надо добавть эту флаговою переменную к сумме,а потом обнулить???как это решается?
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
30.04.2011, 19:14
Я дополнил свое предыдущее сообщение, там все написано=)
1
 Аватар для mrReptiloid
313 / 176 / 25
Регистрация: 30.04.2011
Сообщений: 1,469
30.04.2011, 19:16  [ТС]
я уже посмотрел а поподробнее можно что значит вот это
if (flag) printf("1");
printf ("%s",s);//Выводим результат.
и если складывать 19 и 11 всеравно выйдет 20 вместо 30(....
но спасибо=))))))
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
30.04.2011, 19:20
У меня выводит 30
о_О
Вы же в своем цикле увеличивали свой флаг, но делали это исключительно для инкремента следующего разряда. В последней итерации идет проверка нулевого элемента, и если он больше 9, то флаг увеличивался, но т.к. следующей итерации не было, то он не обнулялся. Таким образом, если флаг не равен нулю(что и означает (flag) ), то к числу необходимо приписать спереди 1.
P.S. сам не понял что написал, ну да ладно
1
 Аватар для mrReptiloid
313 / 176 / 25
Регистрация: 30.04.2011
Сообщений: 1,469
30.04.2011, 19:23  [ТС]
Цитата Сообщение от diagon Посмотреть сообщение
У меня выводит 30
о_О
Вы же в своем цикле увеличивали свой флаг, но делали это исключительно для инкремента следующего разряда. В последней итерации идет проверка нулевого элемента, и если он больше 9, то флаг увеличивался, но т.к. следующей итерации не было, то он не обнулялся. Таким образом, если флаг не равен нулю(что и означает (flag) ), то к числу необходимо приписать спереди 1.
P.S. сам не понял что написал, ну да ладно
тьфу!!!это я тупонул...забыл в условии написать flag=1;воот теперь все работает спасибо!!=)

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


я ведь только начал учится..
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
30.04.2011, 19:30
В общем если нулевой элемент был больше 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);//Выводим результат.
1
 Аватар для mrReptiloid
313 / 176 / 25
Регистрация: 30.04.2011
Сообщений: 1,469
30.04.2011, 19:37  [ТС]
Блин,сейчас в новом проэкте проверил свой первый код он тоже нормально прибавляет...че за прикол??а раньше в старом проэкте не хотело работать правильно.
т.е. раньше в том коде при сложении 19 и 11 выходило 20 а сейчас в том же коде уже 30 выходит...о_О)значит я писал правильно...
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
30.04.2011, 19:38
Из литературы могу посоветовать этот сайт
http://acmp.ru/article.asp?id_text=1329
Там же можно проверить, верно ли вы решили.
1
 Аватар для mrReptiloid
313 / 176 / 25
Регистрация: 30.04.2011
Сообщений: 1,469
30.04.2011, 19:52  [ТС]
Вообщем кому интересно вот решение во всей красе=)
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();
}
0
 Аватар для mrReptiloid
313 / 176 / 25
Регистрация: 30.04.2011
Сообщений: 1,469
02.05.2011, 22:52  [ТС]
А все-таки как работает єта твоя функция nol???дописывает нолики?Помогите разобратся если строки будут разной длины*?!
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
03.05.2011, 10:32
Да, дописывает меньшему числу нули в начало
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';
    }
}
Вообще удобнее хранить числа в перевернутом виде, тогда можно просто пройтись циклом с конца наименьшей строки до конца наибольшей и заполнить это все нулями.
1
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
03.05.2011, 12:03
Все гораздо проще можно сделать:

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; }
1
 Аватар для mrReptiloid
313 / 176 / 25
Регистрация: 30.04.2011
Сообщений: 1,469
03.05.2011, 16:14  [ТС]
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...а числа больше вообще не хочет..
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
03.05.2011, 16:34
Извиняюсь, криво скопировал..
C++
1
for(i=sm2-1; i>=sm-sm2; i--)
Правильно будет
C++
1
for(i=sm2-1; i>=0; i--)
Во 2 случае также
1
 Аватар для mrReptiloid
313 / 176 / 25
Регистрация: 30.04.2011
Сообщений: 1,469
04.05.2011, 19:20  [ТС]
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...
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
05.05.2011, 13:07
Во-первых убейте этот код-_-
C++
1
s[sm]=0
Ошибка из-за него
Во-вторых, у массива s нету конца строки. Т.е. ответ выведется правильно, но за ним последует довольно длинная последовательность мусора... Сделайте так
C++
1
s[strlen(st)]='\0';
После добавления строк их длина изменилась, а вы используете старые переменные... В строке 51 исправьте на
C++
1
for (x = strlen(st)-1,flag; x >= 0; x--)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.05.2011, 13:07

Деление длинных чисел столбиком
Привет. У меня возникла проблема при написании курсовой. Необходимо реализовать деление двух больших чисел(записанных...

Вывод символов строки столбиком
подскажите пожалуйста написал вот такой код #include &lt;iostream&gt; using namespace std; int main(int argc, char* argv) { ...

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

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

Сложить столбиком два числа char
как сложить столбиком 2 числа записанных в char? Объясните кодом


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

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
После бана на Пикабу не работает авторизация аккаунта с Яндекса.
Hrethgir 09.07.2026
В частности https:/ / auto. ru/ logbook/ zapret-na-vozhdenie-posle-65-let_1cf28789-07b4-4c75-a2f7-4cd4edf9deeb тут хотел оставить комментарий такой Зрите в корень - монополизация на разработку программ. . .
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru