4

所以我有一个函数,它接受一个数字,让我们说 123 用于测试目的,并通过将每个数字插入数组中的一个位置将其转换为数组。我的问题是:它倒退了。因此,在这种情况下,123 将打印为 321。关于如何更改它的任何想法?

int i = 0;

while (number) {
    array[i] = number % 10;
    number /= 10;
    printf("%llu", array[i]);
    i++;
}
4

4 回答 4

5

那是因为您要取数字和 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);
于 2012-09-16T00:22:51.850 回答
2

您始终可以在适当的位置反转数组,因为您知道转换完成后它的长度。

于 2012-09-16T00:34:09.200 回答
0

我对如何改变它的想法:使用标准功能itoa()。如果这不是一个选项,您至少应该阅读itoa().

于 2012-09-16T00:26:54.777 回答
0

你也可以做一些其他的方式。取给定数字的 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;
             }
于 2012-09-16T00:50:27.770 回答