Ir ao conteúdo
  • Cadastre-se
aidam

C++ o enesimo digito para um inteiro positivo

Recommended Posts

falae galera,

alguém poderia me dar uma forcinha para fazer um código no qual eu coloque o numero inteiro ,a posição do digito que eu quero ,e o programa me retorna o digito naquela posição

E seria da direita para esquerda ,

todos os código que faço vem trocentos acho que estou fazendo tudo muito errado

tpo assim (7452,0)=7 .o digito na posição 0 é 7

valeu ;)

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@aidam       você precisa  separar os dígitos do número e colocar em um vetor e para isso  você pode usar o função mod e como esse número está na base 10 então faça numero mod 10 , depois precisa inverter os números no vetor e então mostra o número que está na posição informada que será a mesma no vetor .

      se você puder poste seu código para vermos como está e em que podemos ajudar .

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu faria assim 

 int pedaco ( int numero, int casa ) { 
           int digitos[10];
           i = 0 ; 
           while( 1) {
                    digitos[i] = numero % 10 ;
                   numero = numero / 10 ;
                   if (!numero) {
                        break;
                   }
                   i++;
         }
         return (digito[i-casa]);
} 

teste aqui https://repl.it/@bokomoko/obem-digitos

 

  • Curtir 2

Compartilhar este post


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

int contdigitos(int &n);
int posicao (int &num,int &n);
int maiordig (int n);
//main

int main () {
    int n=0,pos,num;
    scanf("%i",&n);
    int numdigitos= contdigitos(n);
    int npos=posicao(num,n);
    printf("\n numero de digitos:%i",numdigitos);
    printf("\n entre com um numero: ");
    scanf("%d", &n);

    printf("Enter a position: ");
    scanf("%d", &pos);

    printf("%dth digit of %d is %d.\n", pos, n,npos);

   int largedig= maiordig(n);
    printf("maior digito:%i",largedig);


    return 0;}

 // numero de digitos

    int contdigitos(int &n) {
    if (n < 10) {
    return 1;
    }
    int contador = 0;
    while (n > 0) {
        n /= 10;
        contador++;
    }
    return contador;
}
//num = posição
int posicao(int &num,int &n){
    int r, t1, t2;

    t1 = pow(10, num +1);
    r = n % t1;

    if (num > 0)
    {
        t2 = pow(10, num);
        r = r / t2;
    }

    return r;
}
int maiordig (int n)
{
int digit, maior=0;
while (n>0){
digit=n%10;
if(digit>maior)
maior=digit;
n=n/10;}
return maior ;}

 

deu tudo certo ,exceto a posição 

já estou louco com isso

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lembre-se, a função pow() invoca a biblioteca de matemática de ponto flutuante e é muito mais lenta do multiplicar por 10 repetidas vezes.

 

adicionado 22 minutos depois

Tente esse código aqui

#include <stdio.h>
int pedaco(int numero, int casa) {
  int digitos[] = { 0,0,0,0,0,0,0,0,0,0};
  int i;
	for (i = 0; numero>0; i++) {
		digitos[i] = numero % 10;
		numero = numero / 10;
	}
	return (digitos[i-casa-1]);
}

int main(void) {
  
	printf("%d %d\n", 7452, pedaco(7452, 0));
	printf("%d %d\n", 7452, pedaco(7452, 1));
	printf("%d %d\n", 7452, pedaco(7452, 2));
	printf("%d %d\n", 7452, pedaco(7452, 3));
	return 0;
}

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz alteração para me voltar um o digito de acordo com o numero e posição que o usuário escolher .

#include<stdio.h>
int pedaco(int numero, int casa) {
  int digitos[] = { 0,0,0,0,0,0,0,0,0,0};
  int i;
 for (i = 0; numero>0; i++) {
  digitos = numero % 10;
  numero = numero / 10;
 }
 return (digitos[i-casa-1]);
}

int main() {
 int numero,casa;
 int position=pedaco(numero,casa);
 printf("digite um numero");
 scanf("%i",&numero);
 printf("posicao:");
 scanf("%i",&casa);
 printf("o digito e:",position);
 return 0;
}

ficou assim brow ,mas na hora de vir o digito o programa não me retorna nada.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 minutos atrás, aidam disse:

/* o erro está aqui, brow, tem que colocar %d */ 

 

 printf("o digito e:",position);
}

ficou assim brow ,mas na hora de vir o digito o programa não me retorna nada.

você está invocando a função ANTES de obter o número e a casa . Pense nisso. Já o printf está errado porque .... faltou O %d

tente assim

prinft("O dígito é: %d \n",position);

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@aidam    experimente essa função que retorna o digito na posição especificada :

int digito(int Nmr, int p){/* aqui o numero e a posiçao*/
    int num[10],aux,c,i=0,t=0,z;
    while(Nmr>0){
        num[t]=Nmr%10;
        Nmr/=10;
        t++;
    }
    z=t;c=t/2;t--;
    for(i=0;i<c;i++){
        aux    = num[i];
        num[i] = num[t];
        num[t] =    aux;
        t--;
    }
    return num[p];/*retorna o digito do numero na posicao*/
}

então chame a função assim :

digit = digito(numero,casa);

digit é o digito  .

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Devair, não precisa trocar a ordem do vetor. Tanto faz se o número está armazenado de frente para traz ou de traz para frente no vetor. O que importa é como a função retorna o valor. 
Seu código ficou muito bom e pode ser ainda mais otimizado.

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Boko Mokoe @devair1010 muito obrigado ,meu código esta uma bagunça,mas funcionando direitinho,agora é so organizar,valeu mesmo por ter dividido o conhecimento de vocês comigo ;)

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é necessário usar vetor, veja uma solução mais simples:

 

#include <stdio.h>

int digito(int numero, int casa){
    int c, num = numero;
    //Conta quantos digitos o número tem:
    for (c=0; num > 0; c++)
        num = num / 10;
    //Obtém e retorna o digito da casa:
    for (; c > casa+1; c--)
        numero = numero / 10;
    return numero % 10;
}

int main()
{
    printf("%d\n", digito(912345, 0));
    printf("%d\n", digito(912345, 2));
    printf("%d\n", digito(912345, 1));
    printf("%d\n", digito(912345, 5));
    printf("%d\n", digito(9123, 0));

    return 0;
}

 

  • Curtir 3

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

×