Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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

 

Editado por Boko Moko
erros de digitaçào
  • 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

Editado por Simon Viegas
Inserir tag CODE
  • 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;
}

 

Editado por Boko Moko
programa estava errado
  • 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);

Editado por Boko Moko
  • 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

Obrigado a você pela oportunidade de ajudá-lo

 

  • Curtir 1

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

muito bom :) tava pensando aqui num jeito de me livrar do vetor. Parabens.

 

  • Curtir 2

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






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

×