解题思路
代码通过分段计算的方式,首先确定税后所得T对应的税前工资所处的税率区间,然后根据这个区间和相应的比例,逐步逆推出税前工资S。
-
初始化变量:程序初始化了多个变量来处理计算:
T:代表小明的税后所得(即输入的T值)。A:代表扣除个人所得税起征点(3500元)后的金额。S:以3500元作为初始税前工资,这是因为3500元是个人所得税的起征点。K和P:这两个向量(数组)存储了用于计算税率的分界点和相关参数。k:存储了每个税率段对应的实际到手比例(例如,税率为3%,则到手比例为0.97,即97%)。
-
输入处理:程序通过
cin >> T;接收用户输入的税后所得T。 -
基础判断:如果T小于或等于3500元,直接输出T作为税前工资,因为这意味着没有需要缴纳的个人所得税。
-
计算税前工资:
- 首先,程序通过
A = T - 3500;计算出超出起征点的部分。 - 然后,使用一个循环遍历
K数组来确定应该使用哪个税率计算。每个循环迭代对应不同的税收区间。 - 在每个循环中,首先判断
A - K[index]是否小于或等于0,如果是,则表示当前的A值(即累计超出的部分)属于当前的税率区间。 - 如果
A - K[index]大于0,表示当前累计超出的部分超过了当前区间,需要减去K[index](即当前区间的税收部分)并增加对应的P[index]到S中,P[index]表示在当前税率下的最大可能增加到税前工资的金额。 - 循环继续,直到找到正确的税率区间。
- 首先,程序通过
-
计算并输出最终税前工资:
- 最后,使用
S += A / k[index];来计算最终的税前工资。这里,A / k[index]表示在当前税率区间内,剩余的税后所得对应的税前金额。将其加到之前的S上,得到完整的税前工资。 - 最后输出税前工资
S。
- 最后,使用
完整代码
#include <iostream>
#include <vector>
using namespace std;
long long T, A, S = 3500, index = 0;
vector<long long> K = {1455, 2700, 3600, 19500, 14000, 16250};
vector<long long> P = {1500, 3000, 4500, 26000, 20000, 25000};
vector<double> k = {0.97, 0.9, 0.8, 0.75, 0.7, 0.65, 0.55};
int main()
{
cin >> T;
if (T <= 3500)
{
cout << T;
return 0;
}
A = T - 3500;
while (true)
{
if (A - K[index] <= 0 || index == 6)
break;
else
{
A -= K[index];
S += P[index];
index++;
}
}
S += A / k[index];
cout << S;
return 0;
}
该篇文章详细描述了一个C++程序,用于计算个人所得税税后所得对应的税前工资,通过分段计算税率区间和累进税率机制。程序初始化变量,接收用户输入的税后所得,遍历税率区间,逐步逆推出税前工资。
3万+

被折叠的 条评论
为什么被折叠?



