В C ++ abs (* a - * b) не возвращает абсолютное значение отрицательного числа - PullRequest
0 голосов
/ 01 марта 2019
#include <stdio.h>
#include <cmath>

void update(int *a,int *b) {
    // Complete this function 
    (*a) = abs(*a + *b);
    (*b) = abs(*a - *b);   
}

int main() {
    int a, b;
    int *pa = &a, *pb = &b;

    scanf("%d %d", &a, &b);
    update(pa, pb);
    printf("%d\n%d", a, b);

    return 0;
}

У меня есть следующий код (из проблем HackerRank C ++).Если у меня есть 4 и 5 в качестве входных данных, он вернет 9 и 4 в качестве выходных данных, а не 9 и 1. Я думал, что это пойдет 4 - 5 = abs (-1) = 1. Почему это не работает так?

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Если вы хотите сделать это без использования временной переменной, вы можете сделать это так:

void update(int *a, int *b) {
    // Complete this function 
    (*a) = abs(*a + *b);
    (*b) = abs(*a - *b -*b);
  }
0 голосов
/ 01 марта 2019

Вы переназначили *a в первой строке, и он использует это новое значение во второй строке.Вам понадобится временное, чтобы избежать этого, например:

int origa = *a;
*a = abs(origa + *b);
*b = abs(origa - *b);

В качестве альтернативы, вы можете получить фантазию с tuple s:

std::tie(*a, *b) = std::make_tuple(abs(*a + *b), abs(*a - *b));

, который просто вычисляет и упаковывает значениясначала, а затем распаковывает их после завершения чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...