Объедините два числа в один. Пример: 123 и 456 становятся 123456

Вопрос:В С++, как мне объединить (примечание: не добавлять) два целых числа в одно большое целое? Например: int1 = 123; int2 = 456; Есть ли функция, чтобы взять два числа и включить intCombined в 123456? EDIT: Мой плохой для того, чтобы не ясно объяснять. Если int2 равно 0, тогда ответ должен быть 123, а не 1230.

Вопрос:

В С++, как мне объединить (примечание: не добавлять) два целых числа в одно большое целое?

Например:

int1 = 123; int2 = 456;

Есть ли функция, чтобы взять два числа и включить intCombined в 123456?

EDIT:

Мой плохой для того, чтобы не ясно объяснять. Если int2 равно 0, тогда ответ должен быть 123, а не 1230. На самом деле, если int1 (число слева) будет иметь значение, если int2 перейдет через 32-битный предел. Поэтому, когда int2 равно 0, int1 равно 0 (или мусор, я не уверен).

Лучший ответ:

Сила десяти, которую нужно умножить на первое число с, является наименьшей, которая больше, чем второе число:

int combine(int a, int b) { int times = 1; while (times <= b) times *= 10; return a*times + b; } Ответ №1

Вы можете преобразовать их в строки, объединить их и затем преобразовать обратно в int?

Ответ №2

Для каждой цифры в int2 вы можете использовать несколько int1 на 10, а затем добавить int2:

// merge(123, 0) => 1230 int merge(int int1, int int2) { int int2_copy = int2; do { int1 *= 10; int2_copy /= 10; } while (int2_copy); return int1 + int2; }

Вы можете избавиться от цикла, используя log10 и ceil.

Ответ №3

Предполагая, что оба int не являются неотрицательными, а int1 идет слева, а int2 – справа, вам нужно выяснить, сколько цифр длинное int2, умножить int1 на 10 кучей раз, а затем добавить их.

unsigned int int1 = blah; unsigned int int2 = blah; unsigned int temp = int2; do { temp /= 10; int1 *= 10; } while (temp >0) unsigned int newInt = int1 + int2; Ответ №4

Вы можете использовать stringstream:

string Append(int _1, int _2){ stringstream converter; converter << _1 << _2; return converter.str(); }

затем вызовите atoi в возвращаемой строке.

Ответ №5

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

Функция сопряжения создает уникальный номер из двух. Это также обратимая функция.

x,y -> z z -> x,y z = (x+y)(x+y+1)/2 + y

Тогда обратное:

w = floor((sqrt(8z+1)-1)/2) t = (w*w + w)/2 y = z — t x = w — y

Примечание. Вышеизложенное не на каком-либо конкретном языке. Просто какая-то математика…

Ответ №6

Следующее, по сути, принятое решение, но с исправлением b == 0, и цикл заменен выражением для вычисления шкалы напрямую:

#include <math.h> int combine(int a, int b) { int times = 1; if( b != 0 ) { times = (int)pow(10.0, (double)((int)log10((double)b)) + 1.0); } return a * times + b ; }

В некоторых случаях (например, цель с FPU и хорошая библиотека математики) выражение может быть быстрее, чем цикл, но я не тестировал эту гипотезу.

Ответ №7

Другой вариант, который работает и для C:

#include <stdio.h> int CombineInt(int int1, int int2) { char cResult[32]; sprintf(cResult, «%d%d», int1, int2); return atoi(cResult); } Ответ №8#include <iostream> using namespace std; int main() { int num1,num2,comb,a,c; cout << «Enter the 1st numbers» << endl; cin>>num1; cout << «Enter the 2st numbers» << endl; cin>>num2; a=num2/10; if(a<=9){ c=num1*100; comb=c+num2; cout<<«The combination of the two numbers is «<<comb; } else if(a>9&&a<=19){ c=num1*1000; comb=c+num2; cout<<«The combination of the two numbers is «<<comb<<endl; } else if(a>19&&a<=29){ c=num1*10000; comb=c+num2; cout<<«The combination of the two numbers is «<<comb<<endl; } return 0; }

Оцените статью
Добавить комментарий