Jump to content

[Resolvido] Concatenar inteiros! É possível?


JoaoNascimento
 Share

Recommended Posts

Não é muito difícil e não é bem programação é mais matemática.

Tens 2 números A e B, por exemplo, A = 12 e B = 21, para que C = AB, acrescentas a A zeros (o número de algarismos que B tem, neste caso acresentas 2 zeros) e depois basta somares na realidade A e B.

Fases (da concatenação):

→ A = 12, B = 21

→ A = 1200, B = 21

→ C = A + B <=> C = 1221

here since 2009

Link to comment
Share on other sites

E como faço a instrução?

aux=(x*11110000)+y

Algo deste genero?

Sim, algo desse género. Tens que ver a ordem de grandeza do y e depois multiplicar o x por uma potência de base de 10 dessa ordem de grandeza. Por exemplo, se y tiver 3 algarismos, tens que multiplicar x por 1000 (10^3).

Na prática podes fazer isso verificando se a divisão inteira por potências de base 10 é zero ou não (i.e começar por dividir por 1, depois 10, 100 até a divisão ser 0, fazes isso facilmente com um ciclo).

Não respondo a dúvidas por mensagem.

Link to comment
Share on other sites

Sim, algo desse género. Tens que ver a ordem de grandeza do y e depois multiplicar o x por uma potência de base de 10 dessa ordem de grandeza. Por exemplo, se y tiver 3 algarismos, tens que multiplicar x por 1000 (10^3).

Na prática podes fazer isso verificando se a divisão inteira por potências de base 10 é zero ou não (i.e começar por dividir por 1, depois 10, 100 até a divisão ser 0, fazes isso facilmente com um ciclo).

Sabendo de matemática tornas todo esse processo mais fácil. Para descobrir o número de zeros necessários basta fazer o log de base 10 do algarismo B.
Link to comment
Share on other sites

Sabendo de matemática tornas todo esse processo mais fácil. Para descobrir o número de zeros necessários basta fazer o log de base 10 do algarismo B.

A complexidade computacional do processo que descrevi para um inteiro típico (2/4bytes) é equivalente a fazer um logaritmo de base 10 do algarismo B. Podemos obviamente usar a biblioteca math, fazer cast para double, calcular o logaritmo, usar floor, fazer cast para int e em seguida usar a função pow, para obter o número pelo qual queremos multiplicar.

Algo como isto, sem math, é igualmente simples:

int concint(int x,int y) {
  int m=10;
  while(y/m>0)
    m*=10;
  return  y+m*x;
}

Não respondo a dúvidas por mensagem.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.