如何在C中按索引对齐两个整数数组?

如何在C中按索引对齐两个整数数组?,c,arrays,math,C,Arrays,Math,我知道这个问题似乎不是很清楚 基本上,我正在尝试编写一个程序,以孩子们的方式显示基本的算术计算(当然是通过控制台) 例如: 5294 +0706 =等 所以我把两个数字放在不同的数组中,按数字分开(比如:{5,2,9,4}这样的整数数组) 我试图学习/弄明白的是,如果两组数字的位数不相同,我将如何将它们向右对齐。例如,如果我只有706而不是0706?目前我有两个数组,一个像{5,2,9,4},另一个像:{7,0,6}–我需要4在6之上 希望这对你们大家都有意义 提前谢谢 只需查找每个数组的长度,

我知道这个问题似乎不是很清楚

基本上,我正在尝试编写一个程序,以孩子们的方式显示基本的算术计算(当然是通过控制台)

例如:

5294
+0706

=等

所以我把两个数字放在不同的数组中,按数字分开(比如:{5,2,9,4}这样的整数数组)

我试图学习/弄明白的是,如果两组数字的位数不相同,我将如何将它们向右对齐。例如,如果我只有706而不是0706?目前我有两个数组,一个像{5,2,9,4},另一个像:{7,0,6}–我需要4在6之上

希望这对你们大家都有意义


提前谢谢

只需查找每个数组的长度,并找到最长的长度。然后为每个不具有该长度的数组创建新数组,首先用旧短数组的数字填充这些数组,然后用零填充其余值,直到达到索引0。我希望我正确理解了你的问题,并用我的建议回答了你的问题

这当然只有在没有小数点的情况下才有效。如果涉及到小数点,则必须找到小数点左右的最大位数,然后为不符合此条件的每个旧数组创建新数组,并执行与上面相同的操作


编辑:一种更简单的方法是,简单地颠倒每个数组的顺序,然后进行计算,但将数字向右(而不是向左)移动,最后颠倒结果的顺序。

您需要有关数组中小数点的信息。否则你可以用整数。我会将指数以10为底,并将其作为我的第一个条目或最后一个条目。一旦你有了它,你可以用它来相应地改变你的格式

'0706'将变成'{-3,7,0,6}',第一个数字是指数。然后像这样对齐逗号

//0 -1 -2 -3
   ,  
   ,
然后输入你的号码

//0 -1 -2 -3
  0, 7  0  6
   ,

冲洗并重复。

我认为这个代码片段可能会生成您想要的那种输出,它可以处理普通整数,因此您不需要处理数组:

char tmpstr[1];
int total = first + second;
int width = snprintf(tmpstr, 1, "%d", total);
printf("  %*d\n", width, first);
printf("+ %*d\n", width, second);
printf("  %.*s\n", width, "-----------");
printf("= %*d\n", width, total);

你试了什么?提示:如果索引>=len输出“0”,请使用最大长度,从左到右。是否尝试过任何操作?你对这件事有什么想法吗?为什么不把它们从左到右储存起来,然后在反面打印出来呢。这将更容易计算并始终保持一致。例124将是{4,2,1}我尝试了两种不同的方法,使用每个数组的长度,然后在较小数字的一侧放置零,以便对齐它们。我不确定是否有更好的方法。如果我们现在不考虑小数点的可能性(想想非常基本的算术),我该如何将数字向下移动以给零留出空间?只需在数组中反向迭代,并将每个索引重新初始化为i+1?假设有一个长度为5、长度为3的数组。你检查长度,发现最长的是5。您可以看到有一个长度不是5(3)的数组,并创建一个长度为5的新数组。然后开始用长度为3的数组的值向后填充新数组(也从后面填充),并用0填充前面的其余空格。嗯,是的,这很有意义。我最初有这个想法,但不确定如何最好地实施它。如果我尝试使用刚才编辑的方法,那么其余的索引不是随机信息,而是0吗?我是指倒车后的尾随数字。假设一个长度为5,另一个长度为3,即使我颠倒顺序,我仍然需要初始化这些零来平衡它,对吗?那么你可以简单地从0循环到“最大索引”,然后将循环中的每个数组相加,但检查每个数组,如果当前循环数高于其最大索引,以避免超出范围的问题。是的,这将是更明显的方法。不幸的是,我计划用非常大的数字进行减法/乘法/除法运算,因此我需要我的代码具有高精度,因此我使用数组来代替单独封装每个数字的方法。@Josh使用字符串会有多困难?您可以使用
%*s
格式轻松地对它们进行右对齐。最初我考虑使用char数组,但是对于每个操作,我仍然需要将所有内容都转换为int。除非你有不同的想法?@Josh我想你可以使用存储在字符数组中的整数进行计算,然后在打印它们之前将它们转换为ASCII,但你必须记住要考虑尾部的
'\0'