hola
¿alguien podría ayudarme con una función en la que pongo un número y cualquier posición y el programa me devuelve el dígito del número que está en esa posición. De izquierda a derecha.
Por ejemplo
(358, 1) = 3
El dígito de 358 en la posición 1 es 3
Hice un código, pero la función relacionada con la posición sigue yendo mal
pon tu código
#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("coloque a posicao: ");
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 ;}
El ejercicio original se compone de 3 funciones, pero sólo la función que pide la posición va mal
por que no tratas el numero como un string (char*) de esa forma podras recorrer sus posición para saber que dígito ocupa que posición
de este modo
#include<stdio.h>
int main () {
char numero[15];
int pos = 0;
fprintf(stdout, "introduzca un digito: ");
scanf("%s", numero);
fprintf(stdout, "ntrodusca una posicion: ");
scanf("%d", &pos);
fprintf(stdout, "%dth digito de %s es %c.\n", pos, numero, numero[pos-1]);
return 0;
}
Ahí va mi versión, desde 0. Se deben tener algunas consideraciones, tal y como muestra el código
#include <stdio.h>
#include <math.h>
int main() {
int n;
int copia;
unsigned i;
unsigned num_digitos;
unsigned pos;
unsigned resultado;
// Adquiero el numero
printf("Numero: ");
scanf("%d", &n);
// Hago copia pues el proceso es destructivo
copia = n;
// Por razon de que log10 no puede usar numeros negativos lo hago positivo
if(copia<0)
copia = -copia;
// Según documentación log10 no debería usarse con 0
if(copia == 0)
num_digitos=1;
else
num_digitos = log10(copia)+1;
// Adquiero la posición deseada
printf("Posicion: ");
scanf("%u", &pos);
// Si está fuera del número: avisar y salir
if(pos==0 || pos>num_digitos) {
puts("Indice fuera de rango");
return -1;
}
// Consigo el número en la posición deseada
for(i=0; i<num_digitos-pos+1; ++i) {
resultado = copia%10;
copia /= 10;
}
// Lo muestro
printf("En la posicion %d del numero %d esta el %d", pos, n, resultado);
}
#include<stdio.h>
#include<math.h>
int contdigitos(int &n);
int maiordig (int &n);
//main
int main () {
char numero [15];
int n,pos=0,num;
scanf("%i",&n);
int numdigitos= contdigitos(n);
printf("\n numero de digitos:%i",numdigitos);
int largedig= maiordig(n);
printf("maior digito:%i",largedig);
fprintf(stdout, "introduzca un digito: ");
scanf("%s", numero);
fprintf(stdout, "ntrodusca una posicion: ");
scanf("%d", &pos);
fprintf(stdout, "%dth digito de %s es %c.\n", pos, numero, numero[pos-1]);
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;
}
int maiordig (int &n)
{
int digit, maior=0;
while (n>0){
digit=n%10;
if(digit>maior)
maior=digit;
n=n/10;}
return maior ;}
jajaja
Ahora la posición es correcta, pero mi función para mayor dígito esta volviendo 0 y no tengo ni idea de por qué
El código funcionó
No sé cómo Agradecêlos, ayudaron mucho
Estas mezclando C y C++ en un compilador de C++.
Cuando en C++ pasas un argumento a una función cuyo argumento esté prototipo con un & pasas una referencia y por tanto ese dato será modificado.
En contdigitos has variado el valor de n, cuando se lo entregas a maiordig ya no tienes el valor n original sino el que te dejó contdigitos.