我试图将C中的整数转换为包含该数字的每个数字的数组
即如果我有
int number = 5400
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
int numberArray[4]
Run Code Online (Sandbox Code Playgroud)
哪里
numberArray[0] = 0;
numberArray[1] = 0;
numberArray[2] = 4;
numberArray[3] = 5;
Run Code Online (Sandbox Code Playgroud)
任何建议都感激不尽.
vav*_*ava 13
这适用于数字> = 0
#include <math.h>
char * convertNumberIntoArray(unsigned int number) {
int length = (int)floor(log10((float)number)) + 1;
char * arr = new char[length];
int i = 0;
do {
arr[i] = number % 10;
number /= 10;
i++;
} while (number != 0);
return arr;
}
Run Code Online (Sandbox Code Playgroud)
编辑:只是更多的C风格,但更加神秘.
#include <math.h>
char * convertNumberIntoArray(unsigned int number) {
unsigned int length = (int)(log10((float)number)) + 1;
char * arr = (char *) malloc(length * sizeof(char)), * curr = arr;
do {
*curr++ = number % 10;
number /= 10;
} while (number != 0);
return arr;
}
Run Code Online (Sandbox Code Playgroud)
Zac*_*ena 12
提示:看一下前面的问题" C#中的数字总和 ".它解释了如何使用几种方法提取数字中的数字,其中一些与C相关.
/* count number of digits */
int c = 0; /* digit position */
int n = number;
while (n != 0)
{
n /= 10;
c++;
}
int numberArray[c];
c = 0;
n = number;
/* extract each digit */
while (n != 0)
{
numberArray[c] = n % 10;
n /= 10;
c++;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用对数而不是循环来计算整数中的位数.从而,
int * toArray(int number)
{
int n = log10(number) + 1;
int i;
int *numberArray = calloc(n, sizeof(int));
for ( i = 0; i < n; ++i, number /= 10 )
{
numberArray[i] = number % 10;
}
return numberArray;
}
Run Code Online (Sandbox Code Playgroud)