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

Сложение двух строк - C++

Восстановить пароль Регистрация
 
evgman
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 20
10.06.2013, 23:08     Сложение двух строк #1
Добрый вечер. Написал программу, которая переводит два числа из десятичной в двоичную систему.
Необходимо теперь эти два двоичных числа как бы склеить.
т.е. склеить нужно два числа, которые получатся - outA и outB.
например выходит outA = 1100, outB = 1111. Должно получиться при склеивании 11001111.
Не могу понять, как это сделать. В выводе, два числа типа integer...а посимвольно склеиваются, только типа char.
Заранее благодарю.

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
#include <iostream>
#include <math.h>
 
using namespace std;
 
int main()
{
    setlocale (LC_ALL , "Russian");
    int A, outA=0, j;
    int B, outB=0, i;
    cout << "Введите часы: ";
    cin >> A;
    cout << "Введите минуты: ";
    cin >> B;
    for(j=0; A>0; j++)
    {
        outA+=(A%2)*pow(10.0,j);
        A/=2;
    }
    for (i=0; B>0; i++)
    {
         outB+=(B%2)*pow(10.0,i);
        B/=2;
    }
    cout <<outA<< endl;
    cout <<outB<< endl;
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2013, 23:08     Сложение двух строк
Посмотрите здесь:

C++ Сложение двух чисел
сложение двух матриц C++
C++ сложение двух строк
C++ Сложение двух матриц
C++ Сложение двух чисел в С++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Doctor_
 Аватар для Doctor_
232 / 232 / 69
Регистрация: 03.02.2011
Сообщений: 1,405
10.06.2013, 23:13     Сложение двух строк #2
Сделай так
C++
1
2
cout <<outA;
    cout <<outB<< endl;
evgman
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 20
10.06.2013, 23:14  [ТС]     Сложение двух строк #3
Дело в том, что получившееся число, нужно потом еще преобразовывать, поэтому так не выйдет.
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
10.06.2013, 23:17     Сложение двух строк #4
Цитата Сообщение от evgman Посмотреть сообщение
outA = 1100, outB = 1111.
C++
1
outA * 10000 + outB
Это если они всегда по 4 разряда и в десятичной системе
evgman
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 20
10.06.2013, 23:20  [ТС]     Сложение двух строк #5
Цитата Сообщение от Мимино Посмотреть сообщение
C++
1
outA * 10000 + outB
Это если они всегда по 4 разряда и в десятичной системе
Нет, не всегда 4 разряда(
Я так понимаю, должна быть какая-то третья переменная, которая и склеит все это воедино.
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
10.06.2013, 23:23     Сложение двух строк #6
Цитата Сообщение от evgman Посмотреть сообщение
Нет, не всегда 4 разряда(
Я так понимаю, должна быть какая-то третья переменная, которая и склеит все это воедино.
Тогда просто в цикле дополнительно посчитать число разрядов outB
C++
1
2
3
int count = 0
for (i = 10; i <= outB; i *= 10)
count++
только в конце проверьте на всякий случай, может быть завышение степени 10-ки на 1.
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
10.06.2013, 23:25     Сложение двух строк #7
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
#include <iostream>
#include <string.h> // strcat
#include <math.h>
 
using namespace std;
 
int paste_together(int first, int two);
 
int main()
{
    setlocale (LC_ALL , "Russian");
    int A, outA=0, j;
    int B, outB=0, i;
    cout << "Введите часы: ";
    cin >> A;
    cout << "Введите минуты: ";
    cin >> B;
    for(j=0; A>0; j++)
    {
        outA+=(A%2)*pow(10.0,j);
        A/=2;
    }
    for (i=0; B>0; i++)
    {
         outB+=(B%2)*pow(10.0,i);
        B/=2;
    }
 
    /*DEBUG*/
    outA = 1100;
    outB = 1111;
    /******/
 
    cout << paste_together(outA, outB) << endl;
    system("pause");
}
 
int paste_together(int first, int two)
{
    char first_char[33], two_char[33];
 
    itoa(first, first_char, 10);
 
    itoa(two, two_char, 10);
 
    strcat(first_char, two_char);
 
    return atof(first_char);
}
evgman
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 20
10.06.2013, 23:42  [ТС]     Сложение двух строк #8
Цитата Сообщение от GetVariable Посмотреть сообщение
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
#include <iostream>
#include <string.h> // strcat
#include <math.h>
 
using namespace std;
 
int paste_together(int first, int two);
 
int main()
{
    setlocale (LC_ALL , "Russian");
    int A, outA=0, j;
    int B, outB=0, i;
    cout << "Введите часы: ";
    cin >> A;
    cout << "Введите минуты: ";
    cin >> B;
    for(j=0; A>0; j++)
    {
        outA+=(A%2)*pow(10.0,j);
        A/=2;
    }
    for (i=0; B>0; i++)
    {
         outB+=(B%2)*pow(10.0,i);
        B/=2;
    }
 
    /*DEBUG*/
    outA = 1100;
    outB = 1111;
    /******/
 
    cout << paste_together(outA, outB) << endl;
    system("pause");
}
 
int paste_together(int first, int two)
{
    char first_char[33], two_char[33];
 
    itoa(first, first_char, 10);
 
    itoa(two, two_char, 10);
 
    strcat(first_char, two_char);
 
    return atof(first_char);
}

Насчет 11001111 - это был просто пример.
outA и outB - переменные, зависящие от введенных чисел.
Соответственно
outA = 1100;
outB = 1111;
не выход. Не нужно outA и outB привязывать к определенным числам.
+ потом это получившееся число, перевести обратно в десятичную систему.
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
10.06.2013, 23:46     Сложение двух строк #9
Значения 1100 и 1111 были вставлены для проверки работоспособности подпрограммы, она также работает и с другими числами.
evgman
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 20
10.06.2013, 23:47  [ТС]     Сложение двух строк #10
Цитата Сообщение от Мимино Посмотреть сообщение
Тогда просто в цикле дополнительно посчитать число разрядов outB
C++
1
2
3
int count = 0
for (i = 10; i <= outB; i *= 10)
count++
только в конце проверьте на всякий случай, может быть завышение степени 10-ки на 1.

А вот тут не понял(
Почему именно outB?
Когда нужно и А и В.
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
10.06.2013, 23:47     Сложение двух строк #11
насчёт перевода можете глянуть Перевод чисел из двоичной в десятичную систему счисления
evgman
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 20
10.06.2013, 23:55  [ТС]     Сложение двух строк #12
Цитата Сообщение от GetVariable Посмотреть сообщение
Спасибо, это я переведу.
Только попробуйте ввести в минутах например число больше 40..результат не получается правильный, там что-то с типом данных не то, integer слишком маленький видимо, а вставляя longint или unsigned, выдает ошибку.
И еще...финальной переменной получается "paste_together", т.е. ее мне в десятичный вид переводить?
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
10.06.2013, 23:57     Сложение двух строк #13
long double попробуйте

Добавлено через 25 секунд
да её.
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
10.06.2013, 23:58     Сложение двух строк #14
Цитата Сообщение от evgman Посмотреть сообщение
А вот тут не понял(
Почему именно outB?
Когда нужно и А и В.
Идея в том, чтобы посчитать количество разрядов в outB. (подправил немного)
C++
1
2
3
int count = 0
for (i = outB; i > 0; i /= 10)
count++
Например, если outB = 101, то count будет равен 3.
Далее
C++
1
outA * pow(10.0, count) + outB
evgman
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 20
11.06.2013, 00:00  [ТС]     Сложение двух строк #15
Цитата Сообщение от GetVariable Посмотреть сообщение
long double попробуйте

Добавлено через 25 секунд
да её.
long double не помогает(
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
11.06.2013, 00:04     Сложение двух строк #16
Цитата Сообщение от evgman Посмотреть сообщение
long double не помогает(
unsigned long long
0 to 18,446,744,073,709,551,615
long long, signed long long
–9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2013, 19:45     Сложение двух строк
Еще ссылки по теме:

Строка: Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. C++
Сложение двух указателей C++
C++ Сложение двух строк

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

Или воспользуйтесь поиском по форуму:
evgman
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 20
11.06.2013, 19:45  [ТС]     Сложение двух строк #17
Нет, все равно получается отрицательное число.
Попробуйте ввести 23 часа 59 минут.
Update.
Извиняюсь..я туплю.
Все получилось.
Парни, вам спасибо!)

Добавлено через 19 часов 36 минут
Ох ребят, не получается у меня обратно все в десятичный вид перевести.
Чего только не пробовал, код не хочет работать.
Слэшами выделил тот участок кода, собственно, где сам перевод обратно из сложенного числа в десятичный вид.
Но почему то не переводит.
Помогите пожалуйста.

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
#include <iostream>
#include <string.h> // strcat
#include <math.h>
#include <stdio.h> //scanf and while
#include <conio.h>  //scanf and while
 
using namespace std;
 
unsigned long long paste_together(unsigned long long first, unsigned long long two);
char c;
 
int main()
{
    setlocale (LC_ALL , "Russian");
    int A, outA=0, j;
    int B, outB=0, i;
    cout << "Введите часы: ";
    cin >> A;
    cout << "Введите минуты: ";
    cin >> B;
    for(j=0; A>0; j++)
    {
        outA+=(A%2)*pow(10.0,j);
        A/=2;
    }
    for (i=0; B>0; i++)
    {
         outB+=(B%2)*pow(10.0,i);
        B/=2;
    }
 
    cout << paste_together(outA, outB) << endl;
 
 
////////////////////////////////////////////////////////////
    while(scanf("%c",&c) )
    {
        int paste_together;
        if( (c<'0') || (c > '1') ) break;
        paste_together<<=1;
        paste_together+=c-'0';
        printf("\n%d",paste_together);
    };
    system ("pause");
////////////////////////////////////////////////////////////
}
 
unsigned long long paste_together(unsigned long long first,unsigned long long two)
{
    char first_char[33], two_char[33];
 
    itoa(first, first_char, 10);
 
    itoa(two, two_char, 10);
 
    strcat(first_char, two_char);
 
    return atof(first_char);
}
Yandex
Объявления
11.06.2013, 19:45     Сложение двух строк
Ответ Создать тему
Опции темы

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