0

我知道这个问题可能看起来不是很清楚。

基本上,我正在尝试编写一个程序来显示基本算术计算(当然是通过控制台),就像孩子们会做的那样。

例如:

   5,294
+ 0,706

=等

所以我将两个数字放在单独的数组中,按数字分割(所以一个 int 数组,如:{5,2,9,4})。

我要学习/弄清楚的是,如果两组数字的位数不同,我将如何将它们对齐。例如,如果我只有 706 而不是 0,706?目前我有两个数组,一个像 {5,2,9,4} 和另一个像这样:{7,0,6} - 我需要 4 超过 6。

希望这对大家有意义!

提前致谢!

4

3 回答 3

1

我认为此代码片段可能会生成您正在寻找的那种输出,它适用于普通整数,因此您无需弄乱数组:

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);
于 2012-11-17T00:14:44.943 回答
0

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

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

编辑:一种更简单的方法,可以简单地通过反转每个数组的顺序,然后进行计算,但将数字带到右侧(而不是左侧)并最终反转结果的顺序。

于 2012-11-16T23:48:03.457 回答
0

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

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

//0 -1 -2 -3
   ,  
   ,

然后输入你的号码

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

冲洗并重复。

于 2012-11-16T23:48:46.670 回答