gpt4 book ai didi

c++ - 添加索引为 -2 的整数

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:02:11 26 4
gpt4 key购买 nike

我接受了一次采访,要求我添加 2 个索引为 -2 的整数,即第 i 位的 (-2) 次幂。我给出了以下答案,但被告知这个答案效率低下且错误。我不同意效率低下的评论,但可能同意不正确的地方。

我添加的方法是,如果 2 位之和大于等于 2,则进位为 -1,因为相邻位的符号相反。如果加 2 位是 -1,我将其设为 1,并将 1 进位到相邻位。

有人发现代码有任何问题吗?

struct Results solution ( int A[], int M, int B[], int N ) {
struct Results result;

int min =M;
int max = M;

int i=0;
int sum;
int carry = 0;

if(N<M)min = N;
if(N>M)max = N;

result.C = (int*) malloc(sizeof(int) * max);

for(i=0;i<min;i++){
sum = A[i] + B[i] + carry;
if(sum >= 2 ){
if(carry == 0 )
carry = -1;
else
carry = -carry;
sum = sum-2;
}
else if(sum == -1){
sum = 1;
carry = 1;
}
else{
carry=0;
}
result.C[i] = sum;
}

if( M > N){
result.L = M;
for(i=N;i<M;i++){
sum = A[i]+carry;
if(sum >= 2 ){
if(carry == 0 ) carry = -1;
else carry = 1;
sum = sum-2;
}
else if(sum == -1){
sum = 1;
carry = - carry;
}
else{carry=0;}
result.C[i] = sum;
}
}

if( N > M){
result.L = N;
for(i=M;i<N;i++){
sum = B[i]+carry;
if(sum >= 2 ){
if(carry == 0 ) carry = -1;
else carry = -carry;
sum = sum-2;
}
else if(sum == -1){
sum = 1;
carry = 1;
}
else{carry=0;}
result.C[i] = sum;
}
}

return result;
}

int main(int argc, char* argv[])
{
int A[] = {0,1,1,0,0,1,0,1,1,1,0,1,0,1,1};
int B[] = {0,0,1,0,0,1,1,1,1,1,0,1};
solution (A,15,B ,12 );
}

最佳答案

问题1

你说你使用如果 2 位之和大于等于 2 则进位为 -1 但在你的一种情况下你有代码:

        if(sum >= 2 ){
if(carry == 0 ) carry = -1;
else carry = 1;
sum = sum-2;
}

这会将进位设置为 1,而不是 -1。

您也可以争辩说这段代码可以更有效地编写为:

        if(sum >= 2 ){
carry = -1;
sum = sum-2;
}

问题2

如果我们添加 {1} 和 {1} 会怎样?您将返回长度 1 和结果 {0},但答案应为 {0,1,1}。 (1+1=-2+4)换句话说,您可能需要返回比输入的最大值更多的位。

关于c++ - 添加索引为 -2 的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16820024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com