如何将长long转换为C中的数组?

时间:2015-01-26 04:35:12

标签: c arrays

我想将整数转换为数组。我的目标是能够花很长时间,例如123456789...,并创建一个数组,其中每个数字都包含一个点,如{1, 2, 3, 4, 5, 6, 7, 8, 9, ...}

我无法使用iota(),因为我不被允许,而且我不想使用snprintf,因为我不想打印数组。我只是想成功。

在考虑了一段时间之后,我想到的唯一解决方案是

  1. 创建一个循环,将每个数字的数字除以10,将商保留为int
  2. 通过int数据类型的限制
  3. 让商的小数消失
  4. 创建一个for循环以递减数字,直到它可以被10整除,同时递增一个计数器i
  5. i有效地成为数字并将其传递给数组
  6. 但是我觉得我这使得这个过于复杂,必须有一个更简单的方法来做到这一点。那么,我是否回答了我自己的问题,或者是否有更简单的方法?

2 个答案:

答案 0 :(得分:1)

对于您的问题,这是一个迭代方法,我认为这个方法完美无缺

下面的代码被评论了!希望它有所帮助

#include <stdio.h>

int main()
{
    // a will hold the number
    int a=548763,i=0;
    // str will hold the result which is the array
    char str[20]= "";
    // first we need to see the length of the number a
    int b=a;
    while(b>=10)
    {
        b=b/10;
        i++;
    }
    // the length of the number a will be stored in variable i 
    // we set the end of the string str as we know the length needed
    str[i+1]='\0';
    // the while loop below will store the digit from the end of str to the 
    // the beginning 
    while(i>=0)
    {
        str[i]=a%10+48;
        a=a/10;
        i--;
    }
    // only for test 
    printf("the value of str is \"%s\"",str);

    return 0;
}

如果您希望数组只存储整数,则只需要更改数组的类型str并更改

str[i]=a%10+48;

str[i]=a%10;

答案 1 :(得分:1)

您只能使用1个循环:

#include <math.h>

int main() {
    int number = 123456789;
    int digit = floor(log10(number)) + 1;
    printf("%d\n", digit);
    int arr[digit];
    int i;
    for (i = digit; i > 0; i--) {
        arr[digit-i] = (int)(number/pow(10,i-1)) % 10;
        printf("%d : %d\n", digit-i, arr[digit-i]);
    }
}