2013-03-22 09:09:17Morris
[ZJ] a647. 投資專家
內容
:
避免浮點數處理。
換整數運算
/********************************************************************/
/* Problem: a647 "投資專家" from */
/* Language: C (562 Bytes) */
/* Result: AC(0ms, 309KB) judge by this@ZeroJudge */
/* Author: morris1028 at 2013-03-19 21:19:04 */
/********************************************************************/
#include <stdio.h>
#include <stdlib.h>
int main() {
int t, a, b;
scanf("%d", &t);
while(t--) {
scanf("%d %d", &a, &b);
int n = (b-a)*10000/a;
int m = (b-a)*100000/a%10;
int tn = n;
if(abs(m) > 4) n = n + (n < 0 ? -1 : 1);
printf("%s%d.%02d%% ", n < 0 ? abs(n/100) < 10 ? " -" : "-" : abs(n/100) < 10 ? " ": " ", abs(n)/100, abs(n%100));
if(tn <= -700 || tn >= 1000) {
puts("dispose");
} else {
puts("keep");
}
}
return 0;
}
John是一個赫赫有名的藝術品投資專家,每個月都會計算藝術品投資的盈虧,以審視其獲利。John每個月月底,即開始計算其每一件藝術品的獲利狀況。由
於藝術品的種類繁多,John每個月總是要花費許多時間,計算其獲利狀況,以決定是否要將藝術品出脫。因此,他想麻煩你撰寫一支程式,計算每一件藝術品的
盈虧狀況。
輸入說明
:
測試資料的第一行是一個整數 n,代表John總共投資了 n 件藝術品。以下 n 行,每一行有兩個整數 m 和 p,m 是該藝術品投資的金額、p 是該藝術品目前的價值。其中 1≤m,p≤100000,單位是仟元。
輸出說明
:
每一件藝術品依據它的投資金額及目前價值,計算並輸出其獲利率 x。x為正,表示獲利;x為負表示虧損。若x≥10.00% 或 x≤-7.00%,即售出該藝術品,以「dispose」表示;否則,即保留該藝術品,以「keep」表示。輸出格式,請見輸出範例。
範例輸入 :
4 200 177 200 200 892 1000 1000 992
範例輸出 :
-11.50% dispose 0.00% keep 12.11% dispose -0.80% keep
提示
:
背景知識:
浮點數誤差問題
若計算結果為:-0.00%,請輸出:0.00%
若計算結果為:-0.00%,請輸出:0.00%
出處
:
(管理:tarco)
避免浮點數處理。
換整數運算
/********************************************************************/
/* Problem: a647 "投資專家" from */
/* Language: C (562 Bytes) */
/* Result: AC(0ms, 309KB) judge by this@ZeroJudge */
/* Author: morris1028 at 2013-03-19 21:19:04 */
/********************************************************************/
#include <stdio.h>
#include <stdlib.h>
int main() {
int t, a, b;
scanf("%d", &t);
while(t--) {
scanf("%d %d", &a, &b);
int n = (b-a)*10000/a;
int m = (b-a)*100000/a%10;
int tn = n;
if(abs(m) > 4) n = n + (n < 0 ? -1 : 1);
printf("%s%d.%02d%% ", n < 0 ? abs(n/100) < 10 ? " -" : "-" : abs(n/100) < 10 ? " ": " ", abs(n)/100, abs(n%100));
if(tn <= -700 || tn >= 1000) {
puts("dispose");
} else {
puts("keep");
}
}
return 0;
}
可以請問一下 這兩段的意思嗎 謝謝
if(abs(m) > 4) n = n + (n < 0 ? -1 : 1);
printf("%s%d.%02d%% ", n < 0 ? abs(n/100) < 10 ? " -" : "-" : abs(n/100) < 10 ? " ": " ", abs(n)/100, abs(n%100));