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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.74
Псих
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 3
22.02.2011, 21:49     Сложение столбиком #1
Необходимо реализовать сложение столбиком.Длинная арифметика так сказать.
Вроде понимаю как.но вот проблема.а как сделать так чтобы вводилась строка с клавиатуры и записывалась в массив?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2011, 21:49     Сложение столбиком
Посмотрите здесь:

C++ Сложение столбиком.
C++ Вычитание, умножение, деление столбиком
C++ Напечатать столбиком значения sin2,sin3,...,sin20
C++ Вычеслить столбиком
сложить столбиком два числа char C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
22.02.2011, 21:54     Сложение столбиком #2
Плюсы
C++
1
2
std::string number;
std::cin >> number;
Си
C
1
2
char str[256];
scanf("%s", str);
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
22.02.2011, 22:36     Сложение столбиком #3
Цитата Сообщение от Псих Посмотреть сообщение
Необходимо реализовать сложение столбиком.Длинная арифметика так сказать.
Си
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
 
#define LENGTH 50
 
int get_cnt_digit(int a)
{
    int cnt= 0;
    while(a)
    {
        a /= 10;
        ++cnt;
    }
    return cnt;
}
 
int main(void)
{
    int X[LENGTH], Y[LENGTH], Z[LENGTH + 5];
    int t = 0, i, j = 0;
    srand((unsigned)time(0));
    for(i = 0; i < LENGTH; ++i)
    {
        X[i] = rand() % 9 + 1;
        printf("%d", X[i]);
    }
    printf("\n");
    for(i = 0; i < LENGTH; ++i)
    {
        Y[i] = rand() % 9 + 1;
        printf("%d", Y[i]);
    }
    for(int i = LENGTH - 1; i >= 0; --i)
    {
            if(get_cnt_digit(X[i] + Y[i] + t) == 2)
            {
                    Z[j++] = (X[i] + Y[i] + t) % 10;
                    t = (X[i] + Y[i] + t) / 10;
            }
            else
            {
                    Z[j++] = X[i] + Y[i] + t;
                    t = 0;
            }
    }
    Z[j++] = t;
    printf("\n");
    for(i = 0; i < j; ++i)
    {
        printf("%d", Z[i]);
    }
    return 0;
}
Добавлено через 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
72
73
74
75
76
77
78
79
#include <iostream>
#include <algorithm>
#include <vector>
#include <ctime>
#include <cstdlib>
#include <string>
#include <sstream>
 
int gen()
{
    return rand() % 9 + 1;
}
 
void show(int a)
{
    std::cout << a;
}
 
int get_last_num(int n)
{
    int t = n % 10;
    return t;
}
 
int get_cnt_digit(int n)
{
    if(!n)
        return 1;
 
    std::ostringstream ost;
    ost << n;
    return ost.str().length();
}
 
std::vector<int> get_sum_nums(
                              std::vector<int> &v1,
                              std::vector<int> &v2, const size_t n)
{
    std::vector<int> v3;
 
    int t = 0;
    for(int i = n - 1; i >= 0; --i)
    {
        if(get_cnt_digit(v1[i] + v2[i] + t) == 1)
        {
            v3.push_back(v1[i] + v2[i] + t);
            t = 0;
        }
 
        else if(get_cnt_digit(v1[i] + v2[i] + t) == 2)
        {
            v3.push_back(get_last_num(v1[i] + v2[i] + t));
            t = (v1[i] + v2[i]) / 10;
        }
    }
 
    return v3;
}
 
int main()
{
    const size_t n = 50;
    std::vector<int> num_1(n), num_2(n), res;
    srand(static_cast<unsigned>(time(0)));
 
    std::generate(num_1.begin(), num_1.end(), gen);
    std::generate(num_2.begin(), num_2.end(), gen);
 
    std::for_each(num_1.begin(), num_1.end(), show);
    std::cout << '\n';
    std::for_each(num_2.begin(), num_2.end(), show);
 
    res = get_sum_nums(num_1, num_2, n);
    std::reverse(res.begin(), res.end());
    std::cout << '\n';
    std::for_each(res.begin(), res.end(), show);
 
    return 0;
}
Псих
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 3
22.02.2011, 23:15  [ТС]     Сложение столбиком #4
char str[256];
scanf("%s", str);

что это???

asics, я вашу программу на си вообще не понимаю.

можете объяснить?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
22.02.2011, 23:17     Сложение столбиком #5
Псих, это то, что вы "не понимаете, как сделать" - ввод строки с клавиатуры и сохранение в символьном массиве.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
22.02.2011, 23:17     Сложение столбиком #6
Псих, Да что там понимать, в столбик складывать как бы все умеют
silent_1991
22.02.2011, 23:20
  #7

Не по теме:

Цитата Сообщение от asics Посмотреть сообщение
в столбик складывать как бы все умеют
Кстати говоря спорное заявление, я знаю кучу людей, которые никаких операций столбиком делать не умеют)))

hepr
 Аватар для hepr
60 / 32 / 5
Регистрация: 21.10.2010
Сообщений: 538
22.02.2011, 23:26     Сложение столбиком #8
char str[256];
scanf("%s", str);
Это обычный ввод, то есть вы инициализируете переменную str текстом с клавы
Псих
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 3
22.02.2011, 23:26  [ТС]     Сложение столбиком #9
имея математическое образование, умею складывать=)

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

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

я принципе написала программу.но вот ошибка где-то.может ошибку найдете?

# include <conio.h>
# include <stdlib.h>
# include <string.h>
# include <stdio.h>

void summ(int *x,int *y,int n,int m)
{
int *z,i,j;

z=new int [m+1];
for (i=0;i<m+1;i++) z[i]=0;

for (i=0;i<n;i++)
{
z[i]=(x[n-i-1]+y[m-i-1])%10;
z[i+1]=(x[n-i-1]+y[m-i-1])/10;
}


for (i=n;i<m;i++)
{
z[i+1]=(z[i]+y[i])/10;
z[i]=(z[i]+y[m-i-1])%10;
}

printf ("Summa=");
if (z[m]!=0) printf("%i",z[m]);
for(i=0;i<m;i++) printf ("%i",z[m-i-1]);

return;
}

void main()
{
clrscr();
char str1[100],str2[100],s[2];
char l[]="0123456789";
int *x,*y,n,m,i,j,op,flag,a;

printf("vvedite nomer operacii.\n");

printf("1. +\n");
printf("2. -\n");
printf("3. *\n");
printf("4. /\n");
printf("5.Exit\n");

scanf("%i",&op);
if (op==5) exit(0);

do
{
flag=0;
printf ("vvedite pervoe chislo->");
scanf ("%s",str1);

for (i=0;str1[i]!='\0';i++)
for (j=0;j<11;j++)
if (str1[i]==l[j]){flag=1; break;}
if (flag==0) printf ("Oshibka!!");

}while (flag==0);

do
{
flag=0;
printf ("vvedite vtoroe chislo->");
scanf ("%s",str2);

for (i=0;str2[i]!='\0';i++)
for (j=0;j<11;j++)
if (str2[i]==l[j]){flag=1; break;}
if (flag==0) printf ("Oshibka!!");
} while (flag==0);

if (strlen(str1)<strlen(str2))
{
flag=1;
n=strlen(str1);m=strlen(str2);

x=new int [n];
y=new int [m];


for (i=0;i<n;i++)
{
s[0]=str1[i];
s[1]='\0';
x[i]=atoi(s);
}

for (i=0;i<m;i++)
{
s[0]=str2[i];
s[1]='\0';
y[i]=atoi(s);
}
}

else
{
flag=0;
n=strlen(str2);m=strlen(str1);
x=new int [n];
y=new int [m];


for (i=0;i<n;i++)
{
s[0]=str2[i];
s[1]='\0';
x[i]=atoi(s);
}

for (i=0;i<m;i++)
{
s[0]=str1[i];
s[1]='\0';
y[i]=atoi(s);
}
if (n==m)
for (i=0;i<n;i++)
if (x[i]<y[i]) break;
else if (x[i]>y[i])
{
flag=1;
for (i=0;i<n;i++)
{
a=x[i];
x[i]=y[i];
y[i]=a;
}
break;
}

}

if (op==1) summ(x,y,n,m);
getch();
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2011, 23:28     Сложение столбиком
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
22.02.2011, 23:28     Сложение столбиком #10
hepr, да вы что? о_О. Да вы просто открыли мне глаза!
А вам какой ввод нужен, с блэк-джеком и шлю..ми?
Yandex
Объявления
22.02.2011, 23:28     Сложение столбиком
Ответ Создать тему
Опции темы

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