【问题标题】:Add an array of integers as a whole number in C在C中将整数数组添加为整数
【发布时间】:2018-05-16 21:23:55
【问题描述】:

我必须编写一个程序,将整数一位数作为时间存储在一个数组中。例如 1234 是 a[0] 1, a[1] 2, a[2] 3, a[3] 4。这些数字最初将存储为 char,因此我需要将它们转换为 int 类型。目标是取 2 个长度不超过 20 位的正整数并输出数字的总和。

我必须使用纸笔相加算法。解决方案必须存储在大小为 20 的数组中,然后写入屏幕。如果输出大于大小为 20 的数组,则不应给出任何输出,屏幕应显示“整数溢出”。

到目前为止,我已经完成了这个编码:

int max;
int max_1;
char number_1[100];
int a;
int max_2;
char number_2[100];
int b;


printf( "\nEnter the total number of digits you wish to display:\n");
scanf_s( "%d", &max);

printf("\nEnter the size of the first integer you wish to add:\n");
scanf("%d", &max_1);
printf("\nEnter the first integer one number at a time seperated by spaces:\n");
while (a = 0, a < max_1, ++a)
{
    scanf_s("%c", number_1[a]);
}

printf("\nEnter the size of the second integer you wish to add:\n");
scanf("%d", &max_2);
printf("\nEnter the second integer one number at a time seperated by spaces:\n");
while (b = 0, b < max_2, ++b)
{
    scanf_s("%c", number_2[b]);
}
    return 0;

我似乎无法弄清楚如何将输入的数字转换为实际的整数形式,因为它们都单独存储在数组中。此外,我不确定如何将整数转换回大小为 20 的数组,以及如何确定输出的大小是否为 20 或更大。

对于我的冗长问题,我深表歉意。我是编码新手,不太擅长推理。我确信有一个简单的解决方案,但是我想不出。任何 cmets、解决方案或建议都会有所帮助。

【问题讨论】:

  • 两个问题:你没有正确使用scanf,它需要一个指针来存储它读取的内容。其次,您没有正确使用scanf,因为"%c" 将读取all 输入,包括空格和换行符(如果您按@ 结束每个输入,则会出现换行符987654325@ 键)。
  • 哦,你也没有正确使用你的循环。您似乎想要for 循环,但这也不完全正确。总而言之,您似乎在猜测该语言的语法和用法,这绝不是一种学习的好方法。要么买一本书,任何本书,要么上几节课。
  • 最后,关于字符的读取,如果你想要数字,为什么不读取数字呢?使用例如"%1d" 并读入 int 将解决您的转换问题,并解决您的 scanf 使用问题之一(因为该格式将跳过前导空白)。
  • 请注意,可以使用 "%s" 格式一次读取一个字符数组。
  • @Someprogrammerdude 我认为你会希望避免将数字读取为数字(尽管那会很棒)任何超过 10 位数字的东西都会溢出,而他会选择 20...

标签: c arrays loops math


【解决方案1】:

一个简单的例子,展示了如何将数字直接读取为整数:

int max_1;
printf("\nEnter the size of the first integer you wish to add:\n");
scanf("%d", &max_1);

int number_1[max_1];  // Use variable-length array

printf("\nEnter the first integer one number at a time seperated by spaces:\n");
for (int i = 0; i < max_1; ++i)
{
    scanf_s("%1d", &number_1[i]);
}

此后,数组number_1 中的每个元素都是一位数int 值。索引0 的最高有效数字,索引max_1 - 1 的最低有效数字。

【讨论】:

  • 所以在我实现了您刚刚发布的编码之后,我找到了一种将数组元素更改为一个大整数的方法。您对如何执行此操作以及如何添加它们有任何建议。很抱歉所有问题,但我已经在这段代码上工作了几天,似乎无法推进我的编码。
  • @ayetman96 您的纸笔算法是否要求它是一个大数字?或者它是否适用于个位数?如果是个位数,为什么不将其保留为个位数?否则,您必须对数字使用 bignum 库,然后作为单独的步骤再次分离出数字(因为没有加法算法适用于整数)。
  • 我的教授提出的问题是,将单个数组元素转换为一个整数,然后与另一个整数相加。我不确定如何执行此步骤以及添加。我尝试过简单的“1+1”,但这并不适用,因为它们存储在一个数组中。
  • @ayetman96 如果您希望能够处理 20 位(或更大)的数字,那么没有标准类型可以做到这一点。
猜你喜欢
  • 2016-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
相关资源
最近更新 更多