0
{0, 0, 0, 1} + {5} = {5, 0, 0, 1}

我想按照我上面在 ONE LOOP 中描述的方式添加这些数组的元素。我怎样才能做到这一点?我只能提出以下解决方案:

for(int i = 0; i < 4; i++)
{
   outcomes = a[i] + b[i];
}

其中 a 和 b 是第一个数组,“结果”是结果数组。但这会中断程序的执行,因为数组的大小不同。

4

5 回答 5

2
  1. 找到两个数组的长度。
  2. 创建较长数组长度的“结果”数组,将较长数组的内容复制到它。

`

for(int i = 0; i < sizeof(smaller_array_length); i++)       
    { 

            outcomes[i] = a[i] + b[i]; 

    }

`

于 2013-04-13T18:22:17.947 回答
1

将两个列表中较长的一个复制到您的结果列表(如果您可以覆盖较长的列表,则可以省略),然后遍历较短的列表并添加值。在下文中,我假设它a长于b

memcpy(outcomes, a, LEN_A * sizeof(TYPE_OF_LIST_ELEMENTS);
for (i = 0; i < LEN_B; i++)
    outcomes[i] += b[i];
于 2013-04-13T17:31:21.040 回答
0

根据您想要的结果的大小循环,然后测试以处理比任一(或两者)输入更长的情况:

for (int i = 0; i < LENGTH(outcomes); i++) {
    if (i < LENGTH(a)) {
        if (i < LENGTH(b) {
            outcomes[i] = a[i] + b[i];
        } else {
            outcomes[i] = a[i];
        }
    } else {
        if (i < LENGTH(b) {
            outcomes[i] = b[i];
        } else {
            outcomes[i] = 0;
        }
    }
}

如果您知道某些情况不会发生,您可以忽略它们——因此,如果LENGTH(outcomes) == max(LENGTH(a), LENGTH(b)),您不需要最后一种情况else

于 2013-04-13T18:31:01.057 回答
0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define c2d(c) (c-'0')
#define d2c(c) (c+'0')

char* add(char *a, char *b){
    int alen, blen;
    int i, carry=0;
    char *wk;

    alen=strlen(a);
    blen=strlen(b);
    if(alen<blen){
        alen ^= blen;blen ^= alen;alen ^= blen;//swap
        wk = a ; a = b ; b = wk;
    }
    wk = (char*)malloc(sizeof(char)*(alen+2));
    wk[alen+1]=wk[alen]='\0';
    for(i=0;i<alen;++i){
        int sum = c2d(a[i])+(i<blen ? c2d(b[i]): 0)+carry;
        wk[i] = d2c(sum % 10);
        carry = sum / 10;
    }
    if(carry){
        wk[i++]='1';
    }
    return wk;
}

int main(){
    char *a1="0001";
    char *a2="5";
    char *a3="99";
    char *a4="02";
    char *a5="51";
    printf("{%s}+{%s}={%s}\n", a1, a2, add(a1,a2));
    printf("{%s}+{%s}={%s}\n", a2, a1, add(a2,a1));
    printf("{%s}+{%s}={%s}\n", a3, a3, add(a3,a3));
    printf("{%s}+{%s}={%s}\n", a4, a5, add(a4,a5));
    return 0;
}
于 2013-04-13T18:44:56.167 回答
-2

首先将长数组的值复制到结果数组中,然后执行

for(int i = 0; i < shortArrayLength; i++)
    {
       outcomes[i] = a[i] + b[i];
    }
于 2013-04-13T17:28:39.523 回答