代码优化实践之税率计算问题

开篇

今天的问题来自于《编程珠玑》第三章【数据决定程序结构】,这里提出了几条代码优化相关的原则,受益不浅。下面是提到的几条原则:

  1. 使用数组重新编写重复代码。冗长的相似代码往往可以使用最简单的数据结构——数组来更好的表述;
  2. 封装复杂结构,当需要非常复杂的数据结构式,使用抽象术语来进行定义,并将操作表示为类;
  3. 尽可能使用高级工具。超文本、名字——值对、电子表格、数据库、编程语言等都是特定稳定领域中强大的工具。
  4. 从数据得出程序的结构。通过使用恰当的数据结构来代替复杂的代码,从数据可以得出程序的结构。万变不离其宗:在动手编写代码之前,优秀的程序员会彻底理解输入、输出和中间数据结构,并围绕这些结构创建程序。

问题概要

本书行将出版之时,美国的个人所得税分为5种不同的费率,其中最大的费率大约为40%。以前的情况更为复杂,税率也更高。下面所示的程序文本采用25个if语句的合理方式来计算1978年的美国联邦所得税。税率分别为0.14,0.15,0.16, 0.17, 0.18,·····。此后的费率增幅大于0.01.有何建议?(下面是书中的代码)

if income <=  2200
    tax =  0
else  if income <  2700
    tax =        . 14 * (income -  2200)
else  if income <=  3200
    tax =  70   +   . 15 * (income -  2700)
else  if income <=  3700
    tax =  145 +   . 16 * (income -  2200)
else  if income <=  4200
    tax =  225 +  . 17 * (income -  2200)
.....
else 
   tax =  53090 + . 70 * (income -  102200)

思路分析

只看上面的代码,肯定是过于累赘了,虽然也能实现功能,但不仅不够优雅,而且也不方便维护。
比较理想的一种方法是把所有收入对应的阈值和税率都写在一个表格里,然后使用程序读取表格,不过这个应该是属于后面可能会写的拓展程序(到时单独发一篇文章)。要在上面的程序基础上进行优化,就可以使用一个数组来保存收入阈值和对应的 税率(第一条原则),然后封装出对应的方法。
下面的代码实现逻辑没什么复杂的,此处不多说,不过有一点值得注意的是税率的具体计算方式,比如说收入为3500, 则税值tax = 145 + 0.16 * (3500 - 3200)= 193,理解了这个计算方式,再去看我的代码,应该很容易理解了。

代码实现

#include<stdio.h>

typedef struct {
	int threshold;// 收入阈值
	double rate;// 税率
	int baseTax;// 达到前一阈值的基础税额
} TaxBracket;

// 计算税值
int calculate_tax(int income) {
	TaxBracket taxBracket[] = {
		{2200, 0.00, 0},
		{2700, 0.14, 0},
		{3200, 0.15, 70},
		{3700, 0.16, 145},
		{4200, 0.17, 225},
	};

	int numBracket = sizeof(taxBracket) / sizeof(taxBracket[0]);
	int tax = 0;
	int nextLimit = 0;

	if (income < taxBracket[0].threshold) {
		return 0;
	}

	for (int i = 0; i < numBracket - 1; i++) {
		if (income <= taxBracket[i + 1].threshold) {
			tax = taxBracket[i + 1].baseTax + (income - taxBracket[i].threshold) * taxBracket[i + 1].rate;
			return tax;
		}
	}

	// 若收入大于最后的阈值
	tax = taxBracket[numBracket - 1].baseTax + (income - taxBracket[numBracket - 1].threshold) * taxBracket[numBracket - 1].rate;

	return tax;
}

int main() {
	int income;
	printf("请输入收入值: ");
	scanf_s("%d", &income);

	int tax = calculate_tax(income);

	printf("收入%d的应缴税额为%d\n", income, tax);

	return 0;
}

代码运行结果截图

以上便是对于税率计算代码的一种优化实践方式,不过值得一提的是,我的代码肯定不算最优化的方式,只不过我技止于此,暂且没找到更加优化的方法,若各位大佬有什么想法,还请不吝指教了。
感谢阅读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/559882.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue3: toRefs与toRef的基本使用

一、前言 本文主要介绍toRefs与toRef的基本使用。 二、内容 1、基本概念 作用: toRefs与toRef可以将一个响应式对象中的每一 个属性&#xff0c;转换为ref对象&#xff1b;不同 toRefs与toRef功能一致&#xff0c;但toRefs可以批量转换。 2、toRefs 如果把reactive定义的…

ROS仿真小车(四)—— URDF与Gazebo集成

文章目录 前言一、ubuntu20.04中下载gazebo_models二、在gazebo中显示简单模型1 创建功能包&#xff0c;导入依赖2 编写URDF文件3 编写launch文件4 在gazebo中显示机器人模型 三、URDF集成Gazebo相关设置四、在gazebo中导入小车模型1 编写xacro文件2 编写launch文件3 运行结果 …

Stable Diffusion 模型分享:MeinaMix(动漫)meinamix_meinaV11

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 MeinaMix 的目标是&#xff1a;能够在很少的提示下…

SpectralMamba:用于高光谱图像分类的高效 Mamba

SpectralMamba&#xff1a;用于高光谱图像分类的高效 Mamba 摘要IntroductionMethodologyPreliminariesSpectralMamba: OverviewSpectralMamba: Key ComponentsB1 Piece-wise Sequential ScanningIii-B2 Gated Spatial-Spectral Merging SpectralMamba: Efficient Mamba for Hy…

【InternLM 实战营第二期作业06】Lagent AgentLego 智能体应用搭建

基础作业 1.完成 Lagent Web Demo 使用 使用 LMDeploy 部署 conda activate agent lmdeploy serve api_server /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-7b \--server-name 127.0.0.1 \--model-name internlm2-chat-7b \--cache-max-entry-count 0.1 …

Linux文件的特殊权限(SUID|SGID|SBIT)

一、SUID 介绍&#xff1a;SUID是一种对二进制程序进行设置的特殊权限&#xff0c;能够让二进制程序的执行者临时拥有所有者的权限&#xff08;仅对拥有执行权限的二进制程序有效&#xff09;。 &#xff08;一&#xff09;语法格式 chmod us 文件名&#xff08;设置SUID权限…

SOLIDWORKS批量改名工具个人版 慧德敏学

每个文件都会有自己的名字&#xff0c;SOLIDWOKRKS模型也不例外。但是如果从资源管理器直接修改模型的文件名&#xff0c;就会导致模型关联的丢失&#xff0c;导致装配体打开之后找不到模型&#xff0c;因此就需要使用SOLIDWORKS的重命名功能。 SOLIDWORKS批量改名插件- Solid…

智能电网线路阻抗模拟器基础认识

智能电网线路阻抗模拟器是专门用于模拟电力系统输电线路阻抗特性的装置&#xff0c;它能够根据设定的参数&#xff0c;精确地模拟出各种不同类型、不同长度和不同截面积的输电线路在正常运行或故障状态下的阻抗特性。这种模拟器在电力系统的规划、设计、运行和维护中起着重要的…

交换机的种类有哪些?主要都具有哪些作用?

在当今数字化时代&#xff0c;网络已经成为我们生活和工作中不可或缺的一部分。无论是家庭网络还是企业网络&#xff0c;都需要有效的网络设备来实现数据通信和资源共享。而网络交换机作为一种重要的网络设备&#xff0c;扮演着连接和管理网络设备的关键角色。本文将探讨交换机…

TXT文本编辑器,高效将文本里特定符号前的内容作为关键词一键复制或移动文件,效管理文件内容

在日常工作和生活中&#xff0c;我们经常需要处理大量的文件&#xff0c;而文件的管理和整理则成为了一个重要的问题。传统的文件管理方式不仅效率低下&#xff0c;而且容易出错。为了解决这一难题&#xff0c;我们推出了一款强大的TXT文本编辑器&#xff0c;它能够帮助你以文件…

岩石变角剪切试验夹具 技术参数

岩石变角试验夹具是根据TB10115-2014铁路工程岩石试验规程等标准利用压力机施加垂直荷载,通过一套特制的夹具使试件沿某一剪切面产生剪切破坏,然后通过静力平衡条件解析剪切面上的法向压应力和剪应力,从而绘制法向压应力&#xff08;σ&#xff09;与剪应力&#xff08;τ&…

flutter release 报错 Error: SocketException: Failed host lookup:

flutter 的 debug 模式没有任何问题 &#xff0c;打了release 包后一直报下面的错&#xff0c;查了一下是 因为没有网络权限 Error: SocketException: Failed host lookup: yomi-test-aws-sg.yomigame.games (OS Error: No address associated with hostname, errno 7) 按照下…

YOLOv5 / YOLOv7 / YOLOv8 / YOLOv9 / RTDETR -gui界面-交互式图形化界面

往期热门博客项目回顾&#xff1a;点击前往 计算机视觉项目大集合 改进的yolo目标检测-测距测速 路径规划算法 图像去雨去雾目标检测测距项目 交通标志识别项目 yolo系列-重磅yolov9界面-最新的yolo 姿态识别-3d姿态识别 深度学习小白学习路线 AI健身教练-引体向上…

使用 大模型快速生成-jsToJava 的正则表达式离线版本的简单html页面

注意&#xff1a;需求要描述清楚-提高程序员的工作效率 代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0&quo…

C++相关概念和易错语法(6)(运算符重载)

1.运算符重载注意事项&#xff1a; &#xff08;1&#xff09;多个同一运算符重载可构成函数重载 &#xff08;2&#xff09;在成员函数中由于隐含了this指针&#xff0c;外部调用看上去前置和后置不会有任何区别&#xff0c;所以为了区分这个在后置时强制引入参数int&#x…

医药行业如何巧用AI智能客服机器人?看完你就会了

我们都知道&#xff0c;医药行业信息量庞大&#xff0c;行业规范严格&#xff0c;客户查询和服务需求复杂多变。那么&#xff0c;医药企业该如何高效响应客户&#xff0c;同时保持服务质量并降低成本呢&#xff1f;答案很可能就在AI智能客服机器人。 AI智能客服机器人利用人工智…

【鸿蒙NEXT】web组件debug模式

官方文档 使用Devtools工具调试前端页面 打开web debug模式 webview.WebviewController.setWebDebuggingAccess(true)chrome 访问 chrome://inspect/#devices Discover network targets 中添加 localhost:9222 创建cat.sh name$(hdc shell ps -ef | grep com.cib.qdzg | …

js作业微博发言

微博 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible" content&q…

TVBox的Json配置接口编写指南,模板格式说明(如何打造一个专属于自己的TVBox配置文件)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 配置解析 📒📝 JSON基础📝 配置文件结构/参数说明📝 编写步骤📝 注意事项🎈 接口分享⚓️ 相关链接 ⚓️📖 介绍 📖 TVBox 是一款备受欢迎的电视盒子应用(免费影视必备),它以其高度自定义的特性深受用户喜爱…

【Applied Algebra】隐藏子群问题和Shor算法的新视角

隐藏子群问题和Shor算法的新视角 隐藏子群问题是指给定一个群和一个函数,该函数对于群的一个子群是常数,并且对于子群的任何两个不同的左陪集有不同的值,问题是找到这个子群.HSP是许多量子算法的基础,其中最著名的是Shor的算法,它可以用来分解大整数和计算离散对数,这直接威胁到…