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

How can you convert a long into an array in c?

我正在做一个用给定输入做算法的项目。我将输入存储在一个 long 中。对于给定的输入,我需要将“数字”转换为数组,以便我可以访问每个数字。例如,如果“number = 73757383”,我需要将其转换为数组:array = [7, 3, 7, 5, 7...] 才能执行该算法(每隔一个数字相乘,然后加上其他人在一起)。但我似乎无法弄清楚如何做到这一点。 任何帮助都是合适的。 另外请注意,我正在使用 cs50 库。 谢谢!

#include <stdio.h>
#include <cs50.h>
#include <math.h>

int main(){

    long credit;
    int number;
    int arr[digit];
    int i;

    do
    {
        credit = get_long("Number: ");
        number = floor(log10(credit) + 1); 

    }
    while (number < 13 || number > 16); 

您可以使用 long to ascii 函数:

ltoa()

或众所周知的标准库函数:

sprintf()

在 ascii 缓冲区中,您可以将每个单独的数字作为字符数字访问。

如果您需要一个整数数组,只需将每个字符数字减去“0”即可:

缓冲区[k] - '0'

最简单的方法是用数字创建一个字符串,然后处理一个接一个的数字:

#include <stdio.h>
#include <string.h>

int main(){

    long credit = 4564894564846;
    int arr[20];
    char buffer[21];

    sprintf(buffer, "%ld", credit);
    int n = strlen(buffer);
    for (int i = 0; i < n; i++)
        arr[i] = buffer[i] - '0';
    
    for (int i = 0; i < n; i++)
        printf("%d\n", arr[i]);
}

https://godbolt.org/z/YY4znd

另一种可能是从带有% 10的数字中提取数字然后除以10,但这样你得到的数字顺序错误。

  1. 使用 % 运算符可能是一个很好的解决方案
while(input != 0) {
  digit = input%10;   // store this one
  input = input/10;
}
  
  1. 或者,您可以使用 'sprintf' 将输入转换为字符串。然后,您可以使用每个数字的索引访问每个数字。

您可以简单地将数字与 1000000000000(至少 13 位)和 9999999999999999(最多 16 位)进行比较,但您可能需要稍后在代码中输入位数:

#include <stdio.h>
#include <cs50.h>

int main() {
    long credit;
    int arr[16];
    int i;

    do {
        credit = get_long("Number: ");
    }
    while (credit < 1000000000000 || credit > 9999999999999999);

    ...

选择:

#include <stdio.h>
#include <cs50.h>

int main() {
    long credit;
    int arr[16];
    int number, i;

    do {
        credit = get_long("Number: ");
        number = snprintf(NULL, 0, "%lu", credit);
    }
    while (number < 13 || number > 16);

    for (i = number; i --> 0;) {
        arr[i] = credit % 10;
        credit /= 10;
    }

另请注意,类型 long 可能太小而无法容纳大于 231 的数字。您应该为此使用 long long 甚至 unsigned long long 或更好地使用字符串。