我正在做一个项目,该项目使用给定的输入执行算法。我把输入存储在一个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);
您可以简单地将数字与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
,或者最好使用字符串。
最简单的方法是用数字创建一个字符串,然后处理一个接一个的数字:
#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("%dn", arr[i]);
}
https://godbolt.org/z/YY4znd
另一种可能性是用% 10
从数字中提取数字,然后除以10,但随后得到的数字顺序错误。
您可以使用long-ascii函数:
ltoa((
或众所周知的标准库函数:
sprintf((
在ascii缓冲区中,您可以访问每个单独的数字作为一个字符数字。
如果你需要一个整数数组,只需在每个字符数字上减去"0":
缓冲区[k]-'0'
- 使用%运算符是一个很好的解决方案
while(input != 0) {
digit = input%10; // store this one
input = input/10;
}
- 或者,您可以使用"sprintf"将输入转换为字符串。然后,您可以使用每个数字的索引来访问每个数字