Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

JoaoNascimento

[Resolvido] Concatenar inteiros! É possível?

Recommended Posts

Localhost

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

Share this post


Link to post
Share on other sites
JoaoNascimento

O problema é que é para colocar dentro de um vector...

o codigo que tenho é este...

void aleatorio()
{
int x,y, *al;

al=(int *)malloc(2*sizeof(int));

x=rand()%9999;
y=rand()%9999;
printf("x: %d\n",x);
printf("y: %d\n",y);

al[0]=x;
al[1]=y;

printf("Coordenadas: %d",al);

}

Share this post


Link to post
Share on other sites
Localhost

Tens uma variável auxiliar que recebe o valor concatenado (como te disse) e depois metes esse valor dentro do array.


here since 2009

Share this post


Link to post
Share on other sites
scorch

Tens a variável A. multiplica-la por 100 (acrescentas dois zeros). Depois é só somares a variável B.


scorch_pp.png

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Share this post


Link to post
Share on other sites
pedrosorio

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.

Share this post


Link to post
Share on other sites
jarsantos

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.

Share this post


Link to post
Share on other sites
pedrosorio

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.

Share this post


Link to post
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

×

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.