C 将用户输入的大量数字存储到整数数组中

C 将用户输入的大量数字存储到整数数组中,c,arrays,struct,C,Arrays,Struct,我目前正在从事一个C项目,该项目要求创建、存储和数学使用太大的数字,而这些数字无法放入普通变量类型中。为此,我们被指示将数字表示为存储在整数数组中的数字序列。我使用的结构定义如下: struct BigInt { int val[300000]; int size; }; (我知道我可以动态分配内存,也就是说 更可取的是,尽管这是我做这件事最舒服的方式,但它已经做到了 到目前为止,这项工作做得非常好,教授就是这样指导我们的。) 然后我定义成员A: struct BigInt A={NULL};

我目前正在从事一个C项目,该项目要求创建、存储和数学使用太大的数字,而这些数字无法放入普通变量类型中。为此,我们被指示将数字表示为存储在整数数组中的数字序列。我使用的结构定义如下:

struct BigInt {
int val[300000];
int size;
};
(我知道我可以动态分配内存,也就是说 更可取的是,尽管这是我做这件事最舒服的方式,但它已经做到了 到目前为止,这项工作做得非常好,教授就是这样指导我们的。)

然后我定义成员A:

struct BigInt A={NULL};
我可以生成并存储随机数,然后用它进行加法、减法和乘法,它们可以有多达300000的任意数字(远远超过我需要考虑的数字)。例如,如果生成数字1432并将其存储到BigInt A中,则A.size将为4,A.val[2]将为3

现在我需要创建一种将用户输入存储到该类型的方法。例如,用户需要能够直接输入50!然后将其存储到我创建的这个结构数组类型中。我该怎么做呢


我能想到的唯一方法是将用户输入存储为字符串,然后多次执行该字符串中的数学运算,每次存储不同的数字,或者直接从标准输出读取数字,但我不知道这两种方法是否可行或是否能解决我的问题。

您可以尝试使用字符串,如下所示:

char s[300001];
scanf("%s", s);
A.size = strlen(s);
for(int i = 0; i < A.size; i++){
    A.val[i] = s[i] - '0';
}
chars[300001];
scanf(“%s”,s);
A.尺寸=strlen(s);
for(int i=0;i

我认为它可以解决您的问题,但这种实现大整数的方法效率不高。

对不起前面的答案,要在c中解决问题,您需要使用字符数组来存储每个数字

如果要将任何表达式输入转换为字符串,则必须编写一个简单的解析器。这将把表达式分解为标记并创建一个树。然后,您可以使用基本操作计算树的所有节点,并将结果存储在最终结构中。此外,在结构中分配300000个整数可能是一个非常糟糕的主意。大多数实现无法支持如此大的自动变量。我建议从4位数这样的小尺寸开始,并根据需要成倍增长。此外,您正在使用基数10将数字存储在
int
中,这可能非常低效。您可以改用
char
。还要看看你是否能实现base 256。这对他有什么帮助?这个问题被标记为C,而不是Java,他专门询问C项目的帮助。谢谢你的建议