如何将 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]);
}
另一种可能是从带有% 10
的数字中提取数字然后除以10,但这样你得到的数字顺序错误。
- 使用 % 运算符可能是一个很好的解决方案
while(input != 0) {
digit = input%10; // store this one
input = input/10;
}
- 或者,您可以使用 '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
或更好地使用字符串。
我正在做一个用给定输入做算法的项目。我将输入存储在一个 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]);
}
另一种可能是从带有% 10
的数字中提取数字然后除以10,但这样你得到的数字顺序错误。
- 使用 % 运算符可能是一个很好的解决方案
while(input != 0) {
digit = input%10; // store this one
input = input/10;
}
- 或者,您可以使用 '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
或更好地使用字符串。