2013-03-22 09:09:17Morris

[ZJ] a647. 投資專家

內容 :
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%

出處 :

(管理: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;
}

蔡尚霖 2015-05-02 17:45:03

可以請問一下 這兩段的意思嗎 謝謝
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));