Pessoal, estou tendo problemas na montagem de um algoritmo que faça o seguinte: Suponha que sejam dados os números n1 e n2 (inteiros).
Se n1 = 5844 e n2 = 1141.
Quero saber quantas vezes algarismos iguais de n1 e n2 ocupam a mesma casa decimal. No exemplo acima, o 4 (casa das dezenas) ocupa o mesmo local nos dois números. Então pensei num jeito de extrair esse algarismo daí e obter outros números n1 e n2 resultantes, ou sejam, com os novos valores n1 = 584 e n2 = 111.
Então, declarei as seguintes variáveis:
int n1, n2, divisor = 1, n1_aux - n1 ,n2_aux = n2, count;
E, dentro de um loop while fiz o seguinte:
while(n1>0){
if(n1%10 == n2%10){
count++;
n1_aux = (n1/10)*divisor + n1_aux%divisor;
n2_aux = (n2/10)/divisor + n2_aux%divisor;
} /*fim if */
n1 = n1 / 10;
n2 = n2 / 10;
divisor = divisor*10;
}
2006-09-13
16:24:17
·
2 respostas
·
perguntado por
Dante D
1
em
Computadores e Internet
➔ Programação e Design
Minha dúvida é qto a essas linhas:
n1_aux = (n1/10)*divisor + n1_aux%divisor;
n2_aux = (n2/10)/divisor + n2_aux%divisor;
Pelo seguinte, até está dando certo, mas se o último algarismo de n2 é igual ao último de n1, já dá errado.
Se n2 = 1144 a equação já não serve.
Já tentei outros meios, outros if's dentro desse if para tentar controlar isso e ainda não deu certo. Se puderem me indicar alguma idéia, já agradeço.
Ia tentar perguntar isso em algum fórum específico de linguagem C, mas acho que não é para tanto, só preciso mesmo de uma sugestãozinha.
2006-09-13
16:24:45 ·
update #1
A propósito, preciso fazer em C e não pretendo usar vetores, até porque ainda estou engatinhando no assunto.
2006-09-13
18:14:58 ·
update #2
Olá, MW, vamos ver se consigo explicar. Estou usando o auxiliar para guardar os novos valores de n1 e n2, já que usarei eles em outra parte do programa. Nessa primeira parte, em que expus minha dúvida, estou comparando os dois números e, se existirem algarismos IGUAIS nas mesmas posições, extraio esses algarismos esses algarismos e obtenho um novo número sem esses algarismos. Na segunda parte, vou comparar se existem algarismos IGUAIS, mas em posições diferentes nos dois números e contarei, também, qtos há, mas sem contar os algarismos encontrados na primeira parte (por isso extraí eles).
2006-09-14
03:26:14 ·
update #3
Para simplificar, vamos considerar apenas um número n=1234 e usar, também n1 = 1234 = n. Se eu desjar extrair o '2' e o '3' e obter um n1_aux = 14, faria o seguinte:
Ele verificaria a condição do if, e veria que o 4 não deve ser extraído, então faria:
n_1 = n_1 / 10 (1234 / 10 = 123)
n_aux = 1234 (por isso estou usando n_aux, porque n_1 será perdido)
divisor = divisor*10 = 1*10 = 10 (o valor inicial de divisor é 1)
O programa volta ao início do loop e entra no if.
dividiria n_1 por 10, obtendo 123/10 = 12
multiplicaria pelo divisor(=10), obtendo 120 (ao final de toda ao peração)
somaria o resto da divisão de n_aux pelo divisor: 1234 % 10 = 4
Ou seja:
n_aux = (n_1/10)*divisor + n_1 % 10
n_aux = (123/10)*10 + 1234 % 10 = 120 + 4 = 124
Veja que consegui extrair o algarismo 3!
No próximo passo, iria para o final do loop e faria:
n_1 / 10 = 123/10 = 12
n_aux = 124
divisor = divisor*10 = 10*10 = 100
2006-09-14
03:26:48 ·
update #4
Agora, suponha que eu queira extrair o '3' e o '4'. Usando a seguinte sequência do código:
//inicializações//
n_1 = 1234
n_aux = 1234
divisor = 1
loop{
n1_aux = (n1/10)*divisor + n1_aux%divisor;
n1 = n1 / 10;
divisor = divisor*10;
} //fim do loop//
{
n_aux = (1234/10)*1 + 1234 % 1 = 123 + 0 = 123
n_1 = 1234/10 = 123
divisor = 1*10 = 10
}
// Agora pretendo extrair o algarismo 3 //
n_aux = (123/10)*10 + 123 % 10 = 12*10 + 3 = 120 + 3 = 123
AQUI FALHA ESSA LINHA DO PROGRAMA! QUANDO PRECISO EXTRAIR LOGO OS ÚLTIMOS ALGARISMOS DE UM NÚMERO ELA JÁ DEIXA DE DAR A RESPOSTA CORRETA. AQUI EU ESPERARIA OBTER n_aux = 12, E NÃO IGUAL A 123!
2006-09-14
03:38:11 ·
update #5