Supposons que j'ai un nombre entier à plusieurs chiffres en C. Je souhaite le diviser en nombres entiers à un chiffre.
123
deviendrait 1
, 2
et 3
.
Comment puis-je faire cela, surtout si je ne sais pas combien de chiffres le nombre entier a?
int value = 123;
while (value > 0) {
int digit = value % 10;
// do something with digit
value /= 10;
}
Commencez par compter les chiffres:
unsigned int count(unsigned int i) {
unsigned int ret=1;
while (i/=10) ret++;
return ret;
}
Ensuite, vous pouvez les stocker dans un tableau:
unsigned int num=123; //for example
unsigned int Dig=count(num);
char arr[Dig];
while (Dig--) {
arr[Dig]=num%10;
num/=10;
}
Comme indice, obtenir le nième chiffre du nombre est assez facile; diviser par 10 n fois, puis mod 10, ou en C:
int nthdig(int n, int k){
while(n--)
k/=10;
return k%10;
}
Essayez ce code si vous souhaitez séparer les chiffres dans le même ordre sans utiliser de tableaux.
//Separate number digits
#include <stdio.h>
#include <math.h>
void main()
{
int x, y, n = 0;
scanf("%d", &x);
//counting digits
y = x;
while (y != 0)
{
n += 1;
y /= 10;
}
//printing separated digits
int i;
for (i = ceil(pow(10, (n - 1))); i != 0; i /= 10)
printf("%d ", (x / i) % 10);
}
Je l'ai fait sur la base du code de @asaelr:
typedef struct digitsArrayPlusNumber {
uint32_t *baseAddress;
uint32_t number;
} digitsArrayPlusNumber;
digitsArrayPlusNumber *splitDigits (uint32_t inValue) {
// based on code from [email protected]
uint32_t inputValue = inValue;
//Count digits
uint32_t theCount = 1;
while (inputValue /= 10)
theCount++;
// put in array
uint32_t *arr = malloc(sizeof(uint32_t) * theCount);
uint32_t Dig = theCount;
while (Dig--) {
arr[Dig]=inValue % 10;
inValue /= 10;
// printf ("%d\n", arr[Dig]);
}
digitsArrayPlusNumber *dandn = malloc (sizeof(digitsArrayPlusNumber));
dandn->baseAddress = arr;
dandn->number = theCount;
return dandn;
}
int main(int argc, const char * argv[]) {
for (int d = 0; d < splitDigits(12345678)->number; d++)
printf ("%u\n", (splitDigits(12345678)->baseAddress)[d]);
}
Cela fonctionne très bien, merci!
//Based on Tony's answer
#include <stdio.h>
int nthdig(int n, int k){
while(n--)
k/=10;
return k%10;
}
int main() {
int numberToSplit = 987;
printf("Hundreds = %i\n",nthdig(2, numberToSplit));
printf("Tens = %i\n",nthdig(1, numberToSplit));
printf("Units = %i\n",nthdig(0, numberToSplit));
}
Cela donne l'impression suivante:
Des centaines = 9
Tens = 8
Unités = 7
Je pense que ci-dessous un morceau de code aidera ...
temp = num;
while(temp)
{
temp=temp/10;
factor = factor*10;
}
printf("\n%d\n", factor);
printf("Each digits of given number are:\n");
while(factor>1)
{
factor = factor/10;
printf("%d\t",num/factor);
i++;
num = num % factor;
}
Vous pouvez utiliser% 10, ce qui signifie le reste si le nombre après que vous l'avez divisé. Donc, 123 % 10
est égal à 3, car le reste correspond à 3, soustrayez le 3 de 123, puis choisissez 120, puis divisez 120 avec 10, ce qui correspond à 12. Et procédez de la même manière.
nous pouvons utiliser ce programme en tant que fonction avec 3 arguments. Ici, dans "while (a ++ <2)", 2 est le nombre de chiffres dont vous avez besoin (vous pouvez donner un argument), remplacez-en 2 par aucun nombre. Ici, nous pouvons utiliser "z/= pow (10,6)" si nous n’avons pas besoin de certains derniers chiffres, remplacer 6 par le nombre de chiffres dont vous n’avez pas besoin (peut être un autre argument), le troisième argument est le nombre que vous devez casser.
int main(){
long signed c=0,z,a=0,b=1,d=1;
scanf("%ld",&z);
while(a++<2){
if(d++==1)
z/=pow(10,6);
c+=(z%10)*b;
z/=10;
b*=10;}
return c;}
Le dernier chiffre de 123 correspond à 123% 10 . Vous pouvez supprimer le dernier chiffre de 123 en faisant 123/10 - en utilisant la division entière, cela vous donnera 12 . Pour répondre à votre question sur "comment savoir combien de chiffres vous avez "- essayez de le faire comme décrit ci-dessus et vous verrez comment savoir quand arrêter.