计算税率

输入格式:
输入第一行包括一个整数T
输出格式:
输出一个整数S,表示小明的税前工资

样例输入整数 9255
样例输出整数 10000

评测用例 1<= T <=100000

解题思路:今晚练算法突然发现,如果一个题目反过来,原来是复杂了很多,这一题我先想着是按照传统思维每个层级叠加,然后发现不行,因为原本的薪资是未知的,而且salary_before - 3500之后,每个层级的税率是不一样的,输出是整数的话 分子*100/(100 - taxrate[i]),这里一开始没有考虑到,后来发现,你一旦原始薪资到了某个水平,之前的每个层级都是要交满的,这样就很简单了,可以想出等式
{salary_now - salaryrange[i] } * rate[i] = x - salary_now+ tax
这里的tax是之前层级交满的和,可以用一个for循环来累加,i由什么确定呢,与每个层级的薪资天花板进行比较,range[0] = 3500

//每个层次  扣除税之后的 真正拿到手的薪资水平天花板 
for(int i=0;i<7;i++){
	cout<<range[i]<<endl;
	3500  range[0]
	4955
	7655
	11255
	30755
	44755
	61005 range[6] 
} 

后来发现 之前的i-1个层级交满 ,比如10000 ,减去基本起征点3500,就是从6500开始 1500肯定收满的(第0个层级), 4500 - 1500 的10%收满,也就是300(第1个层级) 之后6500 - 4500是第二个层级 ,但是这个层级需要自己按照等式计算了
代码如下

#include "iostream"
#include "stdio.h"

using namespace std;

int salaryrange[] = {3500,3500+1500,3500+4500,3500+9000,3500+35000,3500+55000,3500+80000};
int taxrate[]={3,10,20,25,30,35,45}; 
int range[7];

int main(){
	 
	int salary_now,tax,salary_before,i; 
 	range[0]=3500;  
 	range[0] = salaryrange[0]; 
	 //计算天花板 
 	for(i=1;i<7;i++){
 		range[i] = range[i-1]+(salaryrange[i] - salaryrange[i-1]) - (salaryrange[i] - salaryrange[i-1])*taxrate[i-1]/100; //每个层次的扣完税之后的薪资
		 //                                                                                                    3%   10%  20%..... 
	 } 
	cin>>salary_now;
	//薪资水平  
	i=0;//把上面的i数值清为0 
    tax=0; //累计的税 
	for(i ; i<7; i++){
		if(salary_now<=range[i]){ 
			break; 
		} 
	}
	if(i==0){
		salary_before=salary_now; 
	} 
	else{  
		for(int m=1;m<i;m++) {
			tax += (salaryrange[m] - salaryrange[m-1])*taxrate[m-1]/100 ; //之前阶级的tax的和 
		} 
		 
		salary_before =    ((salary_now + tax - salaryrange[i-1]*taxrate[i-1]/100))*100 / (100-taxrate[i-1]);
	}		
	cout<<salary_before<<endl;
	return 0; 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值