English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
Todas as categorias

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

2 respostas

Seguinte me explica pq vc está usando essa linha q vc tem dúvida, pq se o contador de números iguais é o mesmo pra qq número(diagamos 4 ou 5 tanto em n1 qt em n2) pq vc usa um auxiliar? se esse auxiliar é o número pq vc complicou tanto ao invés de só pegar o n1%10? se vc precisa realmente usar td isso, esse código pega se o divisor for 1? pq o divisor 1 anula todo o resto dessa coisa q vc fez, fica n1_aux = (n1/10) e n2_aux = (n2/10)...

2006-09-14 01:55:34 · answer #1 · answered by MW 4 · 0 0

Dante,


Seria mais fácil vc implentar no turbo c++.

2006-09-14 00:07:14 · answer #2 · answered by Rosemeire B 1 · 0 0

fedest.com, questions and answers