Ir ao conteúdo
  • Cadastre-se
CarlosMagnos

C++ Multiplicacao entre digitos C++

Posts recomendados

Dúvidas nesse exercício

Faça um programa que receba um valor inteiro de três dígitos (100 < N < 999). Calcule e imprima o valor do produto entre os três dígitos.

Exemplo de Entrada:

919

Exemplo de Saída:

81 (9 * 1 * 9 = 81)

Sou iniciante e não to conseguindo fazer o produto entre os tres digitos (o usuário que escolhe os digitos)

Se alguem puder disponibilizar o código ou me ajudar com alguma função

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pega o numero-> 919
Divida ele por 100, vai dar 9(919/100). Guarde esse 9, é o primeiro dos 3(centena).

Passo seguinte obtenha o resto(19) com o operador modulo(919%100). essa será a dezena mas temos que repetir a operação feita até aqui com esse 19.

Agora repita tudo porém com 10(19/10), é dizer em vez de dividir por 100, agora será por 10. Vai dar 1 é a casa decimal
O modulo também por 10(19%10), no qual vai sobrar 9(unidade).

acho que da para entender suehsuheh

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 30/03/2020 às 06:17, vangodp disse:

você pega o numero-> 919
Divida ele por 100, vai dar 9(919/100). Guarde esse 9, é o primeiro dos 3(centena).

Passo seguinte obtenha o resto(19) com o operador modulo(919%100). essa será a dezena mas temos que repetir a operação feita até aqui com esse 19.

Agora repita tudo porém com 10(19/10), é dizer em vez de dividir por 100, agora será por 10. Vai dar 1 é a casa decimal
O modulo também por 10(19%10), no qual vai sobrar 9(unidade).

acho que da para entender suehsuheh

aí, eu sempre me perguntei se não dava pra fazer isso com arrays. Dá?

Compartilhar este post


Link para o post
Compartilhar em outros sites

com arrays você vai ter que ter um array de X tamanho definido anteriormente. Tipo se fizer agenda com 10 de tamanho n pode por mais de 10 numeros. Mas você sempre pode declarar um array de 100 mil posiçoes shuhseuhshuseh

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, vangodp disse:

com arrays você vai ter que ter um array de X tamanho definido anteriormente. Tipo se fizer agenda com 10 de tamanho n pode por mais de 10 numeros. Mas você sempre pode declarar um array de 100 mil posiçoes shuhseuhshuseh

Talvez eu me expressei incorretamente. Acho que o que eu quero saber é o seguinte: o for(){} é um array por si só?

porque se eu defino:

int i[900];

Eu já irei limitar o array à quantidade de 897 posições dentro do intervalor 100 < i < 999.

Se eu não defino o i[900] e faço somente um for:

 

#include <iostream>
  int main(){
  for(int i = 101; i < 999; i++ ){
  std::cout << i << " ";
  }
  }

De qualquer maneira eu terei o mesmo resultado. A partir disso, eu quero saber se usando arrays eu posso separar os dados sem usar essa maneira de decompor os números?

Não sei se fui claro :X

Compartilhar este post


Link para o post
Compartilhar em outros sites

A dica do @vangodp é a forma mais indicada de fazer.

 

Mas só por curiosidade segue uma forma não muito elegante usando string,

 

#include <stdio.h>

int main(){
    char n[4];
    
    scanf("%s", n);
    printf("%d\n", (n[0]-'0')*(n[1]-'0')*(n[2]-'0'));

    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include<stdio.h>


int main(){
    
    int array[3];
    scanf("%1d%1d%1d", &array[0],&array[1],&array[2]);
    for ( int i=0; i<3; i++) {
        printf("%d\n", array[i]);
    }
    
    
    return 0;
}

 

adicionado 1 minuto depois
5 horas atrás, Cordas disse:

aí, eu sempre me perguntei se não dava pra fazer isso com arrays. Dá?

Dá..

adicionado 1 minuto depois

😆

  • Haha 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
19 horas atrás, vangodp disse:

#include<stdio.h>


int main(){
    
    int array[3];
    scanf("%1d%1d%1d", &array[0],&array[1],&array[2]);
    for ( int i=0; i<3; i++) {
        printf("%d\n", array[i]);
    }
    
    
    return 0;
}

 

adicionado 1 minuto depois

Dá..

adicionado 1 minuto depois

😆

Valeu a ajuda seu engraçadinho.

 

Duas maneiras: a que você citou no começo

 

#include <iostream>

int main(){
    int num;
    std::cin >> num;

    if(number > 999 || num < 100) {
        std::cout << "Numero fora do alcance" << std::endl;
        return -1;
    }

    std::cout << (num / 100) * (num / 10 % 10) * (num % 10) << std::endl;

    return 0;
}

E agora com uma função:

 

#include <iostream>

int digiteproduto(int x)
{  int produto = 1;
   while (x != 0)
   {
        produto *= (x % 10);
        x /= 10;
    }
    return produto;
}

int main(){

int x;
while (std::cin >> x && x>=100 && x <=999)
{   std::cout<< digiteproduto(x);
    break;
}
return 0;
}

Agora outra pergunta: pra vcs que são experientes, o que se espera de alguém que aprenda programação? Que resolva o problema não importa a maneira, bastando chegar no resultado final e correto? Que resolva o problema de forma elegante? Ou o que?

Compartilhar este post


Link para o post
Compartilhar em outros sites
40 minutos atrás, Cordas disse:

Agora outra pergunta: pra vcs que são experientes, o que se espera de alguém que aprenda programação? Que resolva o problema não importa a maneira, bastando chegar no resultado final e correto? Que resolva o problema de forma elegante? Ou o que?

 

Sim e não...! Tem que desfrutar da viagem também.

 

  • Haha 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 minuto atrás, vangodp disse:

Sim e não...! Tem que desfrutar da viagem também.

Haha okay valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 14/04/2020 às 10:09, Cordas disse:

o for(){} é um array por si só?

 

Não. for é um comando. Nada tem a ver com variáveis e memória.

 

Em 14/04/2020 às 10:09, Cordas disse:

A partir disso, eu quero saber se usando arrays eu posso separar os dados sem usar essa maneira de decompor os números?

 

A notação posicional é por si só um vetor, um array de dígitos. Onde a posição de cada digito multiplica seu valor pela potência da base, começando por 1 á direita. E tem o zero. Essa foi a grande sacada dos hindus face ao sistema romano.

 

Então todo número é um vetor. Decompor o vetor em dígitos em um array ou ler os dígitos em um vetor é claro possível. Só tem que ter cuidado para não ter mais trabalho ao decompor e preparar um tal vetor do que para resolver o problema em si. Em geral não compensa. Pense bem: números já são um vetor por definição. Basta multiplicar dígito a dígito, e esses são os elementos do vetor. Colocar isso dentro de um int[] por exemplo para depois calcular é supérfluo. overkill diria o pessoal do norte

 

E a multiplicação é uma operação reversível

 

Citação

(a*b) == (b*a) para todo par (a,b)


Então a ordem --- que é determinante nos sistemas de numeração --- aqui não importa.

 

Assim um loop como esse

int main()
{
    unsigned fator, produto = 1;
    while ((fator = getchar()) != '\n')
        produto *= (fator - '0');
    printf("Produto: %u\n", produto);
}

resolve
 

image.png.34139f851adf5b56de289c47345e21b7.png

 

Mas é muito chato de usar. Assim seria mais confortável:
 

image.png.ee54a1b4969ea66bfd915078cc67b306.png


Para quem vai usar é muito melhor digitar o valor direto na linha de comando do que ter que digitar o nome do programa, teclar enter, digitar o valor e teclar enter de novo. E o programa tem uma variável a menos: 2 ao invés de 3.

 

Melhor escrever assim, eu acho

 

int main(int argc, char** argv)
{
    unsigned produto = 1;
    if (argc < 2) return 0;
    for (unsigned i = 0; i < strlen(argv[1]); i += 1)
        produto *= argv[1][i] - '0';
    printf("Produto: %u\n", produto);
}


E poder rodar direto na linha de comando sem ter que ficar esperando ;) 

 

2 horas atrás, Cordas disse:

Agora outra pergunta: pra vcs que são experientes, o que se espera de alguém que aprenda programação? Que resolva o problema não importa a maneira, bastando chegar no resultado final e correto? Que resolva o problema de forma elegante? Ou o que?

 

Não vou classificar minha própria experiência, mas o que posso dizer é que os critérios normais são a velocidade para entregar o resultado, a velocidade em obter o resultado e a facilidade em obter o resultado. O simples: preço vs. performance. Em geral elegância é um critério subjetivo e secundário...

Compartilhar este post


Link para o post
Compartilhar em outros sites

@arfnetoOpa, valeu a resposta. Muito bem esclarecedor. Acima eu tinha perguntado sobre o for(){} pelo fato de se eu declarar um array int i[900]; e se declarar o comando for(int i = 101; i < 999; i++){//escreve algo } como no array existem 900 posições e no for serão impressos 900 números, achei que seria a mesma coisa.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
20 minutos atrás, Cordas disse:

int i[900]; e se declarar o comando for(int i = 101; i < 999; i++){//escreve algo } como no array existem 900 posições e no for serão impressos 900 números, achei que seria a mesma coisa

 

Não. Não é. E nesse caso aí você pode usar de i[0] a i[899]. Se tentar usar algo além disso seu  programa vai cancelar. E de 101 a 999 são 899 valores apenas. E como usou i no vetor não pode usar de novo como índice no for

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Aprenda_a_Ler_Resistores_e_Capacitores-capa-3d-newsletter.jpg

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!