这是我的任务的一部分。我必须使用数组制作计算器。 这是它的补充部分。
它工作正常,但问题是,它丢掉了第一个数字。数组大小例如是10。只要添加剩余部分,它就不会显示第一个数字。
例如我想添加5 9 7 5 3 1 0 0 0 0和5 0 8 6 4 2 0 0 0 0.真正的答案是11061730000但是这个程序显示1061730000(先滴1)。
我该如何解决这个问题??
代码:
#include <stdio.h>
#define SIZE_MAX 10
#define SIZE_USE SIZE_MAX-1
int main()
{
int i;
int inum_firstPTR[SIZE_MAX] = {5, 9, 7, 5, 3, 1, 0, 0, 0, 0};
int inum_secondPTR[SIZE_MAX] = {5, 0, 8, 6, 4, 2, 0, 0, 0, 0};
int add_resultPTR[SIZE_MAX] = {0}; //initializing result array
for (i = SIZE_USE; i >= 0; i--)
{
if (add_resultPTR[i] = inum_firstPTR[i] + inum_secondPTR[i] < 10)
{
add_resultPTR[i] = inum_firstPTR[i] + inum_secondPTR[i];
}
else
{
add_resultPTR[i] = inum_firstPTR[i] + inum_secondPTR[i] - 10;
inum_firstPTR[i - 1] = inum_firstPTR[i - 1] + 1;
}
}
puts("");
for (i = 0; i < SIZE_MAX; i++)
{
printf("%d", add_resultPTR[i]);
}
puts("");
return 0;
}
答案 0 :(得分:2)
for (i = SIZE_USE; i >= 0; i--)
{
if (add_resultPTR[i] = inum_firstPTR[i] + inum_secondPTR[i] < 10)
{
add_resultPTR[i] = inum_firstPTR[i] + inum_secondPTR[i];
}
else //carry
{
if ( i > 0) // normal carry to next element
{
add_resultPTR[i] = inum_firstPTR[i] + inum_secondPTR[i] - 10;
inum_firstPTR[i - 1] = inum_firstPTR[i - 1] + 1;
}
else // element [0], no more elements to carry to
{
add_resultPTR[i] = inum_firstPTR[i] + inum_secondPTR[i];
}
}
}
答案 1 :(得分:0)
添加5 + 5 + carry1为11,但add_resultPTR[0]
只能存储1并且[0]
之前没有位置来存储carry1因此它只从1打印。
此外,11061730000是11位数你如何适应SIZE_MAX 10数组。
将SIZE_MAX
定义为11,然后防止溢出存储将inum_firstPTR[SIZE_MAX]
和inum_firstPTR[SIZE_MAX]
从add_resultPTR[0]
添加到add_resultPTR[10]
并反向打印,即{{1}然后从add_resultPTR[10]
到[10]
,然后从[0]
到[9]
。