按元素添加两个数组

时间:2013-04-13 17:24:51

标签: c

{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是第一个数组,“结果”是结果数组。但这会破坏程序的执行,因为数组的大小不同。

5 个答案:

答案 0 :(得分:2)

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

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

    `

答案 1 :(得分:1)

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

memcpy(outcomes, a, LEN_A * sizeof(TYPE_OF_LIST_ELEMENTS);
for (i = 0; i < LEN_B; i++)
    outcomes[i] += b[i];

答案 2 :(得分: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

答案 3 :(得分: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;
}

答案 4 :(得分:-2)

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

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