標準庫方案
#include <stdio.h>
#include <math.h>
int main() {
double x;
while (scanf("%lf", &x) != EOF)
printf("%.2lf\n", fabs(x)); // 雙精度絕對值
return 0;
}
fabs 專用於 double,返回 double
abs 用於 int,labs 用於 long
- 輸出格式
%.2lf 保留兩位小數
手動實現(無需 math.h)
double my_fabs(double x) {
return x >= 0 ? x : -x;
}
// 或用位運算(IEEE 754)
double bit_fabs(double x) {
unsigned long long *p = (unsigned long long*)&x;
*p &= 0x7FFFFFFFFFFFFFFF; // 清除符號位
return x;
}
注意事項
- 整數
INT_MIN 絕對值溢出(無對應正數),浮點數無此問題
- 編譯需鏈接數學庫:
gcc -lm
- 輸入直到 EOF,適配管道/文件重定向