Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

JoaoNascimento

[Resolvido] Concatenar inteiros! É possível?

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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);

}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.