pr0zin Posted October 10, 2012 at 10:10 AM Report #478529 Posted October 10, 2012 at 10:10 AM Boas, gostava de saber se e possivel e como separar um inteiro pelos seus algarismos , ou seja, por ex numero 255, os algarismos sao: 2 - 5 - 5 . Cumprimentos
Solution pikax Posted October 10, 2012 at 10:18 AM Solution Report #478531 Posted October 10, 2012 at 10:18 AM 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. 1 Report 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."
pr0zin Posted October 10, 2012 at 10:27 AM Author Report #478532 Posted October 10, 2012 at 10:27 AM obrigado, nao entendi muito bem o processo 1, pois nao me dou muito bem com restos de divisoes, no entanto entendi perfeitamente o 2º thanks
pikax Posted October 10, 2012 at 10:39 AM Report #478534 Posted October 10, 2012 at 10:39 AM (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 October 10, 2012 at 10:39 AM by pikax 2 Report 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."
HappyHippyHippo Posted October 10, 2012 at 10:42 AM Report #478535 Posted October 10, 2012 at 10:42 AM (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 October 10, 2012 at 10:43 AM by HappyHippyHippo 2 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
pr0zin Posted October 10, 2012 at 10:49 AM Author Report #478536 Posted October 10, 2012 at 10:49 AM 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
HappyHippyHippo Posted October 10, 2012 at 10:56 AM Report #478539 Posted October 10, 2012 at 10:56 AM 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 Portugol Plus
pr0zin Posted October 10, 2012 at 10:58 AM Author Report #478540 Posted October 10, 2012 at 10:58 AM 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
HappyHippyHippo Posted October 10, 2012 at 11:11 AM Report #478547 Posted October 10, 2012 at 11:11 AM 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 Portugol Plus
pr0zin Posted October 10, 2012 at 11:15 AM Author Report #478549 Posted October 10, 2012 at 11:15 AM 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 =)
HappyHippyHippo Posted October 10, 2012 at 11:19 AM Report #478551 Posted October 10, 2012 at 11:19 AM olha que isto só funciona para dígitos e não números com mais de 1 dígito !!! se estás a manipular um número com esses parâmetros deverias usar o strtol IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
pr0zin Posted October 10, 2012 at 11:23 AM Author Report #478554 Posted October 10, 2012 at 11:23 AM eu sei eu sei, obrigado pela ajuda =) ja fiz o prog pelas 2 maneiras =)
thinkabout Posted December 16, 2012 at 01:22 PM Report #487349 Posted December 16, 2012 at 01:22 PM (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 December 16, 2012 at 01:27 PM by thinkabout
HappyHippyHippo Posted December 16, 2012 at 01:24 PM Report #487351 Posted December 16, 2012 at 01:24 PM e a dúvida é ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
thinkabout Posted December 16, 2012 at 01:29 PM Report #487352 Posted December 16, 2012 at 01:29 PM (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 December 16, 2012 at 01:33 PM by thinkabout
HappyHippyHippo Posted December 16, 2012 at 01:33 PM Report #487353 Posted December 16, 2012 at 01:33 PM (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 December 16, 2012 at 01:35 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
thinkabout Posted December 16, 2012 at 01:36 PM Report #487354 Posted December 16, 2012 at 01:36 PM (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 December 16, 2012 at 01:55 PM by thinkabout
coder99 Posted November 9, 2017 at 04:12 AM Report #607993 Posted November 9, 2017 at 04:12 AM #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); }
HappyHippyHippo Posted November 9, 2017 at 07:55 AM Report #607994 Posted November 9, 2017 at 07:55 AM 3 hours ago, coder99 said: e fazer agora para um número de tamanho X ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
chapeuDpalha Posted March 26, 2019 at 01:45 AM Report #614110 Posted March 26, 2019 at 01:45 AM #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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now