c - 在 C++ 中 abs( *a - *b) 不返回负数的绝对值
问题描述
#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。为什么它不能那样工作?
解决方案
您*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));
它只是首先计算并打包值,然后在所有读取完成后解包它们。
推荐阅读
- php - 如何在 Composer autoload_static.php 中禁用“始终包含”类
- php - 如何使用混淆的“SERVER_SOFTWARE”确定 PHP 中的服务器类型
- node.js - 无法读取未定义的属性“catch”
- java - Android:按月计算总和和分组(SQLite)
- r - 如何使用 ggplot2 在 R 中格式化带有轴标签和旋转的雷达图
- python - 如何解决'发生异常:TypeError coercing to Unicode: need string or buffer, tuple found' in Python
- laravel - 如何用他在 Laravel 中的关系返回一个模型?
- vim - 为什么 Vim 用红色突出显示我所有的 JSON 注释?
- reactjs - 如何检查上传的图像是否真的是图像
- python - 在 keras 上使用 evaluate_generator 的准确度得分不一致