我试图将C中的整数转换为包含该数字的每个数字的数组
即如果我有
int number = 5400
我该怎么办?
int numberArray[4]
哪里
numberArray[0] = 0; numberArray[1] = 0; numberArray[2] = 4; numberArray[3] = 5;
任何建议都感激不尽.
这适用于数字> = 0
#includechar * 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; }
编辑:只是更多的C风格,但更加神秘.
#includechar * 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; }
提示:看一下前面的问题" C#中的数字总和 ".它解释了如何使用几种方法提取数字中的数字,其中一些与C相关.
来自Greg Hewgill的回答:
/* 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++; }
您可以使用对数而不是循环来计算整数中的位数.从而,
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; }