Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 33

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

10.06.2013, 23:08. Показов 2414. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. Написал программу, которая переводит два числа из десятичной в двоичную систему.
Необходимо теперь эти два двоичных числа как бы склеить.
т.е. склеить нужно два числа, которые получатся - 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;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.06.2013, 23:08
Ответы с готовыми решениями:

Сложение двух строк
Проблема: не могу получть результат. Что у меня не так? class base { private: char* str; int size; public: base(...

Сложение двух строк
вот написал что то вроде так... но не получается... что дополнить или изменить? int _tmain(int argc, _TCHAR* argv) { char a =...

Сложение двух строк, ошибки
Подскажите пожалуйста где я допустил ошибки, всё никак программа не заработает. Код: #include &lt;iostream&gt; #include...

16
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
10.06.2013, 23:13
Сделай так
C++
1
2
cout <<outA;
    cout <<outB<< endl;
0
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 33
10.06.2013, 23:14  [ТС]
Дело в том, что получившееся число, нужно потом еще преобразовывать, поэтому так не выйдет.
0
 Аватар для Мимино
191 / 161 / 35
Регистрация: 22.05.2013
Сообщений: 455
Записей в блоге: 1
10.06.2013, 23:17
Цитата Сообщение от evgman Посмотреть сообщение
outA = 1100, outB = 1111.
C++
1
outA * 10000 + outB
Это если они всегда по 4 разряда и в десятичной системе
0
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 33
10.06.2013, 23:20  [ТС]
Цитата Сообщение от Мимино Посмотреть сообщение
C++
1
outA * 10000 + outB
Это если они всегда по 4 разряда и в десятичной системе
Нет, не всегда 4 разряда(
Я так понимаю, должна быть какая-то третья переменная, которая и склеит все это воедино.
0
 Аватар для Мимино
191 / 161 / 35
Регистрация: 22.05.2013
Сообщений: 455
Записей в блоге: 1
10.06.2013, 23:23
Цитата Сообщение от evgman Посмотреть сообщение
Нет, не всегда 4 разряда(
Я так понимаю, должна быть какая-то третья переменная, которая и склеит все это воедино.
Тогда просто в цикле дополнительно посчитать число разрядов outB
C++
1
2
3
int count = 0
for (i = 10; i <= outB; i *= 10)
count++
только в конце проверьте на всякий случай, может быть завышение степени 10-ки на 1.
0
 Аватар для GetVariable
164 / 120 / 46
Регистрация: 17.03.2013
Сообщений: 284
10.06.2013, 23:25
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);
}
0
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 33
10.06.2013, 23:42  [ТС]
Цитата Сообщение от 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 привязывать к определенным числам.
+ потом это получившееся число, перевести обратно в десятичную систему.
0
 Аватар для GetVariable
164 / 120 / 46
Регистрация: 17.03.2013
Сообщений: 284
10.06.2013, 23:46
Значения 1100 и 1111 были вставлены для проверки работоспособности подпрограммы, она также работает и с другими числами.
0
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 33
10.06.2013, 23:47  [ТС]
Цитата Сообщение от Мимино Посмотреть сообщение
Тогда просто в цикле дополнительно посчитать число разрядов outB
C++
1
2
3
int count = 0
for (i = 10; i <= outB; i *= 10)
count++
только в конце проверьте на всякий случай, может быть завышение степени 10-ки на 1.

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

Добавлено через 25 секунд
да её.
1
 Аватар для Мимино
191 / 161 / 35
Регистрация: 22.05.2013
Сообщений: 455
Записей в блоге: 1
10.06.2013, 23:58
Цитата Сообщение от 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
0
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 33
11.06.2013, 00:00  [ТС]
Цитата Сообщение от GetVariable Посмотреть сообщение
long double попробуйте

Добавлено через 25 секунд
да её.
long double не помогает(
0
 Аватар для Мимино
191 / 161 / 35
Регистрация: 22.05.2013
Сообщений: 455
Записей в блоге: 1
11.06.2013, 00:04
Цитата Сообщение от 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
1
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 33
11.06.2013, 19:45  [ТС]
Нет, все равно получается отрицательное число.
Попробуйте ввести 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);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.06.2013, 19:45
Помогаю со студенческими работами здесь

Сделать сложение двух строк
Всем привет. Бьюсь об задачу. Есть два символьных массива с литералами. На выходе необходимо получить ответ. Часть кода //Применить...

Конкатенация двух нибблов (сложение двух полубайт в байт)
Как из этих двух полубайт получить полноценный байт со значение &quot;0x3e&quot;? unsigned char first_nibbl = 0x03 unsigned char last_nibbl =...

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

Сложение двух строк
Конкретнее проблема при использовании строковых переменных. Например, создаю программу для сложения двух строк в одну (например:...

Сложение двух одинаковых строк в массиве
Нужно написать программу на Си, которая бы сравнивала две строчки в массиве . Строка в виде: товар,кол-во экспорта. Если попадается в файле...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru