CCF201612-2 工資計算(100分)


試題編號: 201612-2
試題名稱: 工資計算
時間限制: 1.0s
內存限制: 256.0MB
問題描述:
問題描述
  小明的公司每月給小明發工資,而小明拿到的工資爲交完我的所得稅以後的工資。假設他一個月的稅前工資(扣除五險一金後、未扣稅前的工資)爲S元,則他應交的我的所得稅按以下公式計算:
  1) 我的所得稅起徵點爲3500元,若S不超過3500,則不交稅,3500元以上的部分才計算我的所得稅,令A=S-3500元;
  2) A中不超過1500元的部分,稅率3%;
  3) A中超過1500元未超過4500元的部分,稅率10%;
  4) A中超過4500元未超過9000元的部分,稅率20%;
  5) A中超過9000元未超過35000元的部分,稅率25%;
  6) A中超過35000元未超過55000元的部分,稅率30%;
  7) A中超過55000元未超過80000元的部分,稅率35%;
  8) A中超過80000元的部分,稅率45%;
  例如,若是小明的稅前工資爲10000元,則A=10000-3500=6500元,其中不超過1500元部分應繳稅1500×3%=45元,超過1500元不超過4500元部分應繳稅(4500-1500)×10%=300元,超過4500元部分應繳稅(6500-4500)×20%=400元。總共繳稅745元,稅後所得爲9255元。
  已知小明這個月稅後所得爲T元,請問他的稅前工資S是多少元。
輸入格式
  輸入的第一行包含一個整數T,表示小明的稅後所得。全部評測數據保證小明的稅前工資爲一個整百的數。
輸出格式
  輸出一個整數S,表示小明的稅前工資。
樣例輸入
9255
樣例輸出
10000
評測用例規模與約定
  對於全部評測用例,1 ≤ T ≤ 100000。

問題連接:CCF201612試題
css

問題描述:工資收入是分段計稅的,輸入稅後工資,求稅前工資。(詳見原問題,點擊上面的連接)。ios

問題分析:根據稅前工資算稅後工資相對要容易許多,本題正好相反。編程

從編程方法上來講,一種是將工資段和稅率寫到程序邏輯中。這種作法修改程序比較難,邏輯也比較複雜。另一種是查表法,經過查表來計算最後的結果。查表法的優勢在於,單有關規定改變時,只須要調整表格,而不須要改變程序邏輯。markdown

該問題原始數據能夠建兩個表格,一是工資收入段表,二是稅率表。根據這兩個表能夠算出收入範圍表,即由實際收入獲得最高稅率是哪一檔的表。進一步的計算就變得簡單許多。
spa

程序說明 商業應用開發中,是不容許出現任何金額計算錯誤的,偏差也是不容許的。致使金額偏差有多種緣由,其中,使用浮點變量是常見的一種,一點要避免使用浮點類型變量,確保金額相關的計算準確無誤

提交後得100分的C++語言程序以下:.net

/* CCF201612-2 工資計算 */

#include <iostream>

using namespace std;

//#define DEBUG

int salaryrange[] = {3500, 3500+1500, 3500+4500, 3500+9000, 3500+35000, 3500+55000, 3500+80000 };
int taxrate[] = {3, 10, 20, 25, 30, 35, 45};
const int SIZE = sizeof(salaryrange) / sizeof(int);

int range[SIZE];

int main()
{
    int t, s;

    // 計算各類收入範圍
    range[0] = salaryrange[0];
    for(int i=1; i<SIZE; i++) {
        range[i] = range[i-1] + (salaryrange[i] - salaryrange[i-1])
                - (salaryrange[i] - salaryrange[i-1]) * taxrate[i-1] / 100;
    }

#ifdef DEBUG
    for(int i=0; i<SIZE; i++)
        cout << range[i] << " ";
    cout << endl;
#endif

    // 輸入數據:
    cin >> t;

    // 計算收入範圍
    int i;
    for(i=0; i<SIZE; i++)
        if(t <= range[i])
            break;

    // 計算稅前工資
    if(i == 0)
        s = t;
    else {
        s = salaryrange[i-1] + (t - range[i-1]) * 100 / (100 - taxrate[i-1]);
    }

    // 輸出結果
    cout << s << endl;

    return 0;
}
相關文章
相關標籤/搜索