Ir ao conteúdo
  • Cadastre-se

C++ o enesimo digito para um inteiro positivo


aidam

Posts recomendados

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
Link para o comentário
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
Link para o comentário
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
Link para o comentário
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
Link para o comentário
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
Link para o comentário
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
Link para o comentário
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
Link para o comentário
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
Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!