题目传送门
题目大意
题目描述
某国所得税计算十分复杂。该国政府指定你制作一个自动计算所得税的程序。以下是该国计算所得税的规则:
- 所得税免征额为 180000 180000 180000 元。
- 应纳税额中不超过 300000 300000 300000 元的所得额,按 10 % 10\% 10% 的税率缴纳所得税。
- 余下应纳税额中不超过 400000 400000 400000 元的所得额,按 15 % 15\% 15% 的税率缴纳所得税。
- 余下应纳税额中不超过 300000 300000 300000 元的所得额,按 20 % 20\% 20% 的税率缴纳所得税。
- 余下应纳税额按 25 % 25\% 25% 的税率缴纳所得税。
- 需要缴纳所得税少于 2000 2000 2000 元(不含 0 0 0 元)的,缴纳所得税 2000 2000 2000 元。
- 需要缴纳所得税为小数的,向上取整所得税。
输入格式
输入共 ( T + 1 ) (T+1) (T+1) 行。
第一行,一个整数 T T T,表示需要计算所得税的人的数量。
接下来 T T T 行,每行一个整数 k k k,表示第 i i i 个人的税前收入。
输出格式
输出共 T T T 行。
每行按照 Case i: tax
的格式输出所得税。
样例解释 #1
在输入输出样例 #1 中的第 3 3 3 个示例中:
金额 | 税率 | 税收 |
---|---|---|
180000 180000 180000 | 0 % 0\% 0% | 0 0 0 |
300000 300000 300000 | 10 % 10\% 10% | 30000 30000 30000 |
135000 135000 135000 | 15 % 15\% 15% | 20250 20250 20250 |
总计 | 50250 50250 50250 |
数据范围
对于 100 % 100\% 100% 的数据, T ≤ 5000 T\leq 5000 T≤5000, 1 ≤ k ≤ 1 0 9 1\leq k\leq 10^{9} 1≤k≤109。
解题思路
我们设 n i n_i ni 为第 i i i 个人的税前收入。
由题意可知:
- n i ≤ 1.8 × 1 0 5 n_i\le1.8\times10^5 ni≤1.8×105 时,第 i i i 个人应缴纳 0 0 0。
- 1.8 × 1 0 5 < n i ≤ 2 × 1 0 5 1.8\times10^5<n_i\le2\times10^5 1.8×105<ni≤2×105 时,第 i i i 个人应缴纳 2000 2000 2000。
- 2 × 1 0 5 < n i ≤ 4.8 × 1 0 5 2\times10^5<n_i\le4.8\times10^5 2×105<ni≤4.8×105 时,第 i i i 个人应缴纳 0.1 × ( n i − 180000 ) 0.1\times(n_i-180000) 0.1×(ni−180000)。
- 4.8 × 1 0 5 < n i ≤ 8.8 × 1 0 5 4.8\times10^5<n_i\le8.8\times10^5 4.8×105<ni≤8.8×105 时,第 i i i 个人应缴纳 30000 + 0.15 × ( n i − 480000 ) 30000+0.15\times(n_i-480000) 30000+0.15×(ni−480000)。
- 8.8 × 1 0 5 < n i ≤ 1.18 × 1 0 6 8.8\times10^5<n_i\le1.18\times10^6 8.8×105<ni≤1.18×106 时,第 i i i 个人应缴纳 90000 + 0.2 × ( n i − 880000 ) 90000+0.2\times(n_i-880000) 90000+0.2×(ni−880000)。
- n i > 1.18 × 1 0 6 n_i>1.18\times10^6 ni>1.18×106 时,第 i i i 个人应缴纳 150000 + 0.25 × ( n i − 1180000 ) 150000+0.25\times(n_i-1180000) 150000+0.25×(ni−1180000)。
然后,我们就可以模拟此过程。
CODE:
#include <stdio.h>
#include <math.h>
int main() {
short t;
scanf("%hd", &t);
for (int i = 1; i <= t; i++) {
int n;
double ans = 0;
scanf("%d", &n);
if (n <= 180000)
ans = 0;
else if (n <= 200000)
ans = 2000;
else if (n <= 480000)
ans = 0.1 * (n - 180000);
else if (n <= 880000)
ans = 30000 + 0.15 * (n - 480000);
else if (n <= 1180000)
ans = 90000 + 0.2 * (n - 880000);
else
ans = 150000 + 0.25 * (n - 1180000);
printf("Case %d: %0.lf\n", i, ceil(ans));
}
return 0;
}
总结
这题非常简单,按题意模拟即可。
标签:所得税,题解,Calculator,缴纳,UVA12342,2000,times10,180000,300000 From: https://blog.csdn.net/2301_76224755/article/details/140272646