Returnera siffran på en given position i ett heltal.
Jag har problem med att lösa problemet som anges i rubriken och att försöka söka efter rätt svar känns som om det är omöjligt av någon anledning även om svaret inte borde vara svårt.
Koden skriver också antalet siffror i det givna numret.
Koden:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <time.h>
int main(int argc, char **argv)
{
int n;
int count = 0;
int pos;
int posnum = 1;
printf("Skriv ett nummer: ");
scanf("%d", &n);
while(n > 0) {
n = n / 10;
count = count + 1;
}
printf("Skriv en position i tidigare nummer: ");
scanf("%d", &pos);
while (1) {
pos = (n % (10 * posnum)) / posnum;
posnum *= 10;
printf("%d\n", posnum);
if (0 == n / posnum)
break;
}
printf("Antalet siffror i talet/siffran blir %d\n", count);
printf("Siffran i positionen blir: %d\n", posnum);
return 0;
}
Jag har försökt söka efter lösningen men kan inte hitta den och har försökt så lös det själv men det verkade inte fungera. Eller så kan jag bara inte förstå hur jag ska involvera lösningen i min kod.
Ett problem med din kod är att du i första delen förändrar värdet på heltalet n genom att dividera n med 10 tills n = 0.
Efrersom n = 0 när du kommer till andra delen så kommer inte den att fungera.
Förslag: Använd en tillfällig variabel istället för n i den första delen.
Den andra delen förstår jag inte hur du har tänkt.
Förslag: Om talet är n, antalet siffror i talet är count och du vill ta fram siffran med position pos (från vänster) så är den (n/(10*(count-pos)))%10.
Exempel och test. Om n = 987 så är count = 3
- Om nu pos = 1 så är count-pos = 2 och n/(10*(count-pos) = 987/100 = 9. Eftersom 9%10 = 9 så får vi önskat resultat.
- Om nu pos = 2 så är count-pos = 1 och n/(10*(count-pos) = 987/10 = 98. Eftersom 98%10 = 8 så får vi önskat resultat.
Sen måste du ta hänsyn till och hantera specialfall som att pos count.
Enklast är väl att läsa in heltalet i en char array istället, eller var det explicit sagt att det måste hanteras som ett heltal?
printf("nummer:");
char buffer[255];
fgets(buffer, sizeof(buffer), stdin);
printf("pos:");
char position[5];
fgets(position,sizeof(position),stdin);
int pos = atoi(position);
printf( "siffra på pos %d är %c\n", pos, buffer[pos]);