while una sume sumar suma siguiente serie que programa primos primeros para números numeros los escribir entre dev con comprendidos calcule algoritmo c++ parsing formatting

c++ - una - Combina dos números en uno. Ejemplo: 123 y 456 se convierten en 123456.



suma de n numeros en dev c++ (9)

En C ++, ¿cómo puedo combinar (nota: no agregar) dos enteros en un entero grande?

Por ejemplo:

int1 = 123; int2 = 456;

¿Hay una función para tomar los dos números y convertir intCombined en 123456?

EDITAR:

Mi mal por no explicar con claridad. Si int2 es 0, entonces la respuesta debería ser 123, no 1230. Sin embargo, en realidad, int1 (el número en el lado izquierdo) solo tendrá un valor si int2 supera el límite de 32 bits. Entonces, cuando int2 es 0, entonces int1 es 0 (o basura, no estoy seguro).


¿Podrías convertirlos en cadenas, combinarlos y luego convertirlos de nuevo a un int?


El poder de diez, que necesitas para multiplicar el primer número, es el más pequeño, que es más grande que el segundo número:

int combine(int a, int b) { int times = 1; while (times <= b) times *= 10; return a*times + b; }


La siguiente es esencialmente la solución aceptada de sth pero con la corrección b == 0, y el bucle reemplazado con una expresión para calcular la escala directamente:

#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 ; }

En algunas circunstancias (como un objetivo con una FPU y una buena biblioteca de matemáticas) la expresión puede ser más rápida que el bucle, pero no he probado esa hipótesis.


Otra opción que también funciona para C:

#include <stdio.h> int CombineInt(int int1, int int2) { char cResult[32]; sprintf(cResult, "%d%d", int1, int2); return atoi(cResult); }


Para cada dígito en int2 , puede multiplicar int1 por 10 y luego agregar 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; }

Podría deshacerse del bucle usando log10 y ceil .


Podrías usar stringstream:

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

a continuación, llame a atoi en la cadena devuelta.


Si los números que intenta combinar son enteros positivos, puede usar las funciones de emparejamiento .

La función de emparejamiento crea un número único a partir de dos. También es una función reversible.

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

Entonces lo contrario es:

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

Nota. Lo anterior no está en ningún idioma específico. Sólo un poco de matemáticas ...


Suponiendo que ambos ints no son negativos, y int1 va a la izquierda y int2 va a la derecha, debe calcular cuántos dígitos tiene la longitud de int2, multiplicar int1 por 10 un montón de veces y luego sumarlos.

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;


#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; }