{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 是第一个数组,“结果”是结果数组。但这会中断程序的执行,因为数组的大小不同。
{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 是第一个数组,“结果”是结果数组。但这会中断程序的执行,因为数组的大小不同。
`
for(int i = 0; i < sizeof(smaller_array_length); i++)
{
outcomes[i] = a[i] + b[i];
}
`
将两个列表中较长的一个复制到您的结果列表(如果您可以覆盖较长的列表,则可以省略),然后遍历较短的列表并添加值。在下文中,我假设它a
长于b
:
memcpy(outcomes, a, LEN_A * sizeof(TYPE_OF_LIST_ELEMENTS);
for (i = 0; i < LEN_B; i++)
outcomes[i] += b[i];
根据您想要的结果的大小循环,然后测试以处理比任一(或两者)输入更长的情况:
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
。
#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;
}
首先将长数组的值复制到结果数组中,然后执行
for(int i = 0; i < shortArrayLength; i++)
{
outcomes[i] = a[i] + b[i];
}