Jump to content

Separar inteiro nos seus dígitos


Go to solution Solved by pikax,

Recommended Posts

  • Solution
Posted

se usares o resto e a divisao consegues fazer isso:

int a = 255;

while(a>0)
{
 printf("%d - ",a%10);
 a= a/10;
}

ou podes converter para um array de chars

char str[100];
int a = 255;
int i;

sprintf(str,"%d",a);

for(i=0;i<strlen(str);++i)
 printf("%c ",str[i]);

Claro que existem muitas formas de fazern isto.

  • Vote 1

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Posted (edited)

obrigado, nao entendi muito bem o processo 1, pois nao me dou muito bem com restos de divisoes[...]

O resto por 10(a%10), se imaginares que pegas num numero e subtrais por 10 ate' que esse numero seja menor que dez, por exemplo o a%10 pode-se converter para uma funcao feita por ti:

int simularResto(int resto, int numero)
{
 while(numero>=resto)
numero-=resto;

 return numero;
}

int main()
{
int a = 255;

while(a>0)
{
  printf("%d - ",simularResto(10,a));
  a= a/10;
}
}
Edited by pikax
  • Vote 2

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Posted (edited)

mas devias perceber o resto porque é a forma normal assim como é solução para alguns problemas:

perceber o resto da divisão intereira:

255     | 10
        ----------
20        25 <- resultado da divisão inteira
-----
 55
 50
-----
  5 <- resto da disião inteira

conclusão :

255 / 10 = 25

255 % 10 = 5

por outras palavras, o resto da divisão inteira por 10 dá sempre o dígito das unidades

este processo é muito usado para determinar ciclos em contagens em N

exemplo: determinar que dia da semana é o dia 26 se o dia 1 é uma quinta ?

//assumindo:
domingo = 0;
segunda = 1;
terca = 2;
querta = 3;
quinta = 4;
sexta = 5;
sabado = 6;

// dia 1 é uma quinta
dia_a_verificar = 4;
// retirado 1 para não contabilizar o primeiro dia que já está feito
dia_a_verificar = dia_a_verificar + 26 - 1;
// o dia da semana é o resultado do resto da divisão inteira por 7 (número de dias)
dia_a_verificar = dia_a_verificar % 7;
// (26 + 4 - 1) % 7 = 29 % 7 = 1 = segunda
Edited by HappyHippyHippo
  • Vote 2
IRC : sim, é algo que ainda existe >> #p@p
Posted

AHHHHHHHHHH ja entendi thanks, gostei da tua explicaçao para o resto happyHippo 😄

ja agora,

quando faço num1=atoi(vetor[0]); obtenho erro, ou seja, no codigo de converter o numero 255 para vetor ele fica guardado na posiçao [0] um 2 certo?

eu qeria converter esse 2 novamente para inteiro, apenas o 2, nao devia ser como estou a fazer?

cumps

Posted
num1=atoi(vetor[0])

isto não é converter um inteiro para string mas o inverso, olha para o nome da função:

atoi = alpha to integer

para converter um inteiro para uma string usa o sprintf:

char vector[3]; // vector destino
int numero = 255; // valor a ser convertido

sprintf(vector,   // destino da escrita
       "%d",     // formatar a entrada num número inteiro (%d)
       numeero); // primeiro dado de entrada da formatação, o número a ser convertido
IRC : sim, é algo que ainda existe >> #p@p
Posted

peço desculpa, enganei me a escrever, era string para inteiro =)

ou seja, o que esta em vetor[0] e 2, mas esta em string, e eu qero pegar nesse 2 em string e converte-lo em inteiro

Posted

peço desculpa, enganei me a escrever, era string para inteiro =)

ou seja, o que esta em vetor[0] e 2, mas esta em string, e eu qero pegar nesse 2 em string e converte-lo em inteiro

errado novamente, mas é um erro comum para quem está a iniciar.

o 2 não se encontra no formato de string, mas sim em aplhanumérico.

string é uma sequência de caracteres terminados no valor 0, o que tens é somente um caracter

char caracter = '2'; // isto é um caracter
char * string1 = "string"; // isto é a string estática {'s','t','r','i','n','g',0}, como vês existe um 0 no final

para o teu caso, existe um método muito simples de converter um caracter que representa um dígito no seu valor numérico:

olha para os valores numéricos dos caracteres '0' a '9'

'0' = 48

'1' = 49

'2' = 50

'3' = 51

'4' = 52

'5' = 53

'6' = 54

'7' = 55

'8' = 56

'9' = 57

logo basta subrair ao valor do caracter pretendido, o valor 48, ou melhor ainda, o caracter '0' (para portabilidade)

conclusão:

// vector com os valores '2', '2' e '5'
char * vector = {'2','5','5'};
// apresentar a conversão dos caracteres do vector em números
printf("%d%d%d\n",       // apresentar os números seguidos, deverá apresentar 255
      vector[0] - '0',  // conversão do primeiro caracter/dígito no seu valor numérico real
      vector[1] - '0',  // conversão do segundo caracter/dígito no seu valor numérico real
      vector[2] - '0'); // conversão do terceiro caracter/dígito no seu valor numérico real

mais informações, pesquisa por ascii table

IRC : sim, é algo que ainda existe >> #p@p
Posted

agora qe falas nisso eu lembro-me de ter falado nisso no ano passado, quando ainda estava a dar chars e recebiamos um numero em char e qeriamos converte-lo para inteiro, mas tambem me lembro de receber por argv um numero, e converte-lo para inteiro com o atoi, mas realmente é mais simples como me indicaste , obrigado =)

  • 2 months later...
Posted (edited)

Tenho aqui uma dúvida neste código.


#define _CRT_SECURE_NO_WARNINGS
#include

/*
Desenvolva uma função que receba, como argumento, um valor inteiro positivo e devolva o
numero de dígitos do valor recebido.
*/

int contadigitos(int n)
{
int i=0,reduz;

while (n > 0)
{
reduz = n % 10 ; // Reduz um digito ao numero. // n %= 10 ; -> Não dá porque ?
n /= 10 ; // Actualiza o número
i++;
}
return i;
}


int main()
{
int n;
printf("Introduza um numero \n");
scanf("%d",&n);

printf("\n O numero tem %d digitos \n" , contadigitos(n));
}

Porque é que não posso usar n %= 10, na alinha abaixo não precisei de mais uma variável.

reduz = n % 10 ; // Reduz um digito ao numero. // n %= 10 ; -> Não dá porque ?
n /= 10 ; // Actualiza o número
Edited by thinkabout
Posted (edited)

Já atualizei o tópico.

reduz = n % 10 ; // Reduz um digito ao numero. // n %= 10 ; -> Não dá porque ? Se usar isto, diz sempre que só tenho um digito.
n /= 10 ; // Actualiza o número
i++; //  Soma um digito ao contador.
Edited by thinkabout
Posted (edited)

porque dizes que não dá ?

até podes apagar essa linha que a função continua a contar o número de dígitos ...

ps :

já agora, se tens n = 12345

n %= 10; // é a mesma coisa que : n = n % 10;
printf("%d",n); // output : 5 (perdeste os 1234 iniciais)
Edited by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Posted (edited)

Pois apaguei e continua a trabalhar bem ...

n %= 10; // é a mesma coisa que : n = n % 10;
printf("%d",n); // output : 5 (perdeste os 1234 iniciais)

Já entendi agora o porque de ele só contar 1 digito.

Também já entendi a diferença entre

reduz = n % 10
e
n %= 10

Obrigado

Edited by thinkabout
  • 4 years later...
Posted
#include <stdio.h>
#include <stdlib.h>

int main(){
    int INum,IResult[5];
    //SIMPLES PROGRAMA QUE QUEBRA UM NUMERO DE 6 DIGITOS
    // CODADO POR JACKBAUER
    
    printf(":: SIMPLES PROGRAMA QUE QUEBRA ::\n");
    printf("::   UM NUMERO DE 6 DIGITOS ::\n\n\n");
    printf("Digite Numero:");
    scanf("%d",&INum);
    printf("================================\n\n");
    printf("Voce Digitou: -[ %d ]-\n",INum);
    printf("================================\n\n");
    IResult[0] = INum / 100000;
    IResult[1] = INum / 10000 % 10;
    IResult[2] = INum / 1000 % 10;
    IResult[3] = INum / 100 % 10;
    IResult[4] = INum / 10 % 10;
    IResult[5] = INum % 10;
    
    printf("Primeiro Digito: [%d]\n",IResult[0]);
    printf("Segundo Digito: [%d]\n",IResult[1]);
    printf("Terceiro Digito: [%d]\n",IResult[2]);
    printf("Quarto Digito: [%d]\n",IResult[3]);
    printf("Quinto Digito: [%d]\n",IResult[4]);
    printf("Sexto Digito: [%d]\n",IResult[5]);
    
    return(0);
}
  • 1 year later...
Posted
#include <stdio.h>
#include <conio.h>
#include <string.h>
main (){
    int num, a, i;
    char tam[10];
    printf("Digite\t");
    scanf("%d",&num);
    if (num < 0){
        num = -num;
    }
    sprintf(tam,"%d",num);
    a = strlen(tam);
    printf("Valor Absoluto");
    for (i=0;i<a;i++)
    printf("\n|%c| = %c ",tam[i],tam[i]);
    getch();
    return 0;
}

obrigado

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.