所以我有一个函数,它接受一个数字,让我们说 123 用于测试目的,并通过将每个数字插入数组中的一个位置将其转换为数组。我的问题是:它倒退了。因此,在这种情况下,123 将打印为 321。关于如何更改它的任何想法?
int i = 0;
while (number) {
array[i] = number % 10;
number /= 10;
printf("%llu", array[i]);
i++;
}
所以我有一个函数,它接受一个数字,让我们说 123 用于测试目的,并通过将每个数字插入数组中的一个位置将其转换为数组。我的问题是:它倒退了。因此,在这种情况下,123 将打印为 321。关于如何更改它的任何想法?
int i = 0;
while (number) {
array[i] = number % 10;
number /= 10;
printf("%llu", array[i]);
i++;
}
那是因为您要取数字和 10 之间除法的余数,所以您要取最后一位数字插入数组的第一个位置,依此类推。
您可以创建一个递归函数以您想要的方式填充数组。尝试这样的事情:
void
fillArray (int array[], int *i, int number) {
if (number < 10 ) {
array[*i] = number;
*i = *i +1;
} else {
fillArray (array, i, number/10);
array[*i] = number%10;
*i = *i +1;
}
}
最后,在 i 中,您将获得数组的大小。你应该这样调用函数:
int array[100];
int i = 0;
int n = 123;
fillArray (array,&i,n);
您始终可以在适当的位置反转数组,因为您知道转换完成后它的长度。
我对如何改变它的想法:使用标准功能itoa()
。如果这不是一个选项,您至少应该阅读itoa()
.
你也可以做一些其他的方式。取给定数字的 log10(n)。
enter code here
整数nd,f,i = 0;nd=log10(n) f=pow(10,nd);
while(n)
{
array[i++]=n/f;
n=n%f;
}