简单的c数组计算器丢弃第一个数字

时间:2015-03-22 10:48:55

标签: c arrays

这是我的任务的一部分。我必须使用数组制作计算器。 这是它的补充部分。

它工作正常,但问题是,它丢掉了第一个数字。数组大小例如是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;
}

2 个答案:

答案 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]