[C++] KY79 浮点数加法 北京大学复试上机题

news2024/11/23 6:30:48

题目链接

KY79 浮点数加法https://www.nowcoder.com/questionTerminal/ddec753f446e4ba4944e35378ba635c8

描述

求2个浮点数相加的和 题目中输入输出中出现浮点数都有如下的形式: P1P2...Pi.Q1Q2...Qj 对于整数部分,P1P2...Pi是一个非负整数 对于小数部分,Qj不等于0


输入描述:

对于对于每组案例,每组测试数据占2行,分别是两个加数。


输出描述:

每组案例是n行,每组测试数据有一行输出是相应的和。 输出保证一定是一个小数部分不为0的浮点数

示例1

输入
0.111111111111111111111111111111
0.111111111111111111111111111111

输出
0.222222222222222222222222222222

源代码

#include<iostream>
#include<string>
using namespace std;

int main1() 
{
	string s = "abcdefg";
	cout << s.substr(1) << endl;

	string ss = "123456789";
	ss[0] = (char)('0'+5);
	cout << ss << endl;

	ss = '1' + ss;
	cout << ss << endl;
	return 0;
}

//习题4.4 浮点数加法
int main()
{
	string s1, s2;
	//每个测试输出包括多组案例的题目很常见,以后直接用while循环就好。除非明确说明只有一组输入
	//getline(cin, s1)是直接将一行输入读取并赋值给s1,这里用cin也可以。但是,对于一次输入中有多个空格的情况,如果直接用cin的话,每次只能读取一部分,不能满足题目要求。
	while (getline(cin, s1)) {
		getline(cin, s2);

		//分别得到两个字符串小数点的位置,方便后续获得两个字符串的整数和小数部分
		int pos1 = s1.find('.'); 
		int pos2 = s2.find('.');

		//分别得到两个字符串的整数部分,字符串的形式
		string ints1 = s1.substr(0, pos1);
		string ints2 = s2.substr(0, pos2);

		//分别得到两个字符串的整数部分,字符串的形式
		//由于截取是包括括号内位置所在索引,这里不需要小数点,所以从小数点后一位开始截取
		string floats1 = s1.substr(pos1+1); 
		string floats2 = s2.substr(pos2+1);

		//保证floats1的长度不大于floats2,后续只遍历floats1、更改floats2,方便许多
		if (floats1.length() > floats2.length()) { 
			swap(floats1, floats2);
		}

		int plus = 0; //记录每一位相加时的进位

		//从较短的那个小数部分的字符串的末位开始,对两个小数部分进行加法操作
		for (int i = floats1.size() - 1; i >= 0; i--) { 
			//对每一位字符代表的整数进行求和,整数字符得到整数用这种方法就可以了
			int sum = floats1[i] - '0' + floats2[i] - '0' + plus;
			//对于两个字符串在某一位相加和大于10的情况,要进行进位处理
			if (sum >= 10) {
				plus = 1;
				sum -= 10;
			}
			else {
				plus = 0;
			}
			//将处理过进位的结果赋值给floats2的相应位置。单个整数转字符串形式用这种方法就可以了
			floats2[i] = (char)(sum + '0');
		}
		
		//保证ints1的长度不大于ints2,后续只遍历ints1、更改ints2,方便许多
		if (ints1.length() > ints2.length()) { 
			swap(ints1, ints2);
		}
		//考虑到ints2的长度大于或等于ints1的长度,如果等于,其实没啥问题。
		//但是,如果ints2的长度大于ints1的长度,如ints2 = "12345"和ints1 = "678",要先右对齐再操作。如果要操作"678"的8,对应的是"12345"的5,但是二者在相应字符串中的索引不同,这里的gap就是用来对齐的
		int gap = ints2.length() - ints1.length();
		for (int i = ints1.size() - 1; i >= 0; i--) {
			//以下代码作用同对两个小数部分进行加法部分
			int sum = ints1[i] - '0' + ints2[i + gap] - '0' + plus; 
			if (sum >= 10) {
				plus = 1;
				sum -= 10;
			}
			else {
				plus = 0;
			}
			ints2[i + gap] = (char)(sum + '0');
		}

		//考虑ints2的长度大于ints1的长度,如ints2 = "12345"和ints1 = "678",678+345=1023,这里的进位1还需要进行处理
		//但是一次进位还可能引发其他的进位,如ints2 = "999345"和ints1 = "678",这里需要对于ints2比ints1长度多出来的那部分处理
		if (plus != 0) {
			for (int i = gap-1; i >= 0; i--) {
				//以下代码作用同对两个小数部分进行加法部分
				int sum = ints2[i] - '0' + plus;
				if (sum >= 10) {
					plus = 1;
					sum -= 10;
					ints2[i] = (char)(sum + '0');
				}
				//这里,如果发现sum<10,也就是不用进位了,其他的就不用处理了,直接退出循环
				//但是,先把已经得到的sum赋值给相应的位置
				else {
					ints2[i] = (char)(sum + '0');
					break;
				}
			}
		}
		//将相加得到的整数部分ints2、小数点、小数部分floats2输出即可
		cout << ints2 << "." << floats2 << endl;
	}

	return 0;
}

提交结果

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【前端】html

HTML标签&#xff08;上&#xff09; 目标&#xff1a; -能够说出标签的书写注意规范 -能够写出HTML骨架标签 -能够写出超链接标签 -能够写出图片标签并说出alt和title的区别 -能够说出相对路径的三种形式 目录&#xff1a; HTML语法规范HTML基本结构标签开发工具HTML常用标…

C语言案例 99乘法口诀-04

难度2复杂度2 题目&#xff1a;打印99乘法口诀 步骤一&#xff1a;定义程序目标 编写一个C程序&#xff0c;打印99乘法口诀。 步骤二&#xff1a;程序设计 整个程序分别为两个部分&#xff0c;第一部分是使用for循环打印的行数&#xff0c;第二部分是使用for循环控制打印的列…

基于Azure OpenAI Service 的知识库搭建实验⼿册

1.概要 介绍如何使⽤Azure OpenAI Service 的嵌⼊技术&#xff0c;创建知识库&#xff1b;以及创建必要的资源组和资源&#xff0c;包括 Form Recognizer 资源和 Azure 翻译器资源。在创建问答机器⼈服务时&#xff0c;需要使⽤已部署模型的 Azure OpenAI 资源、已存在的…

一键翻译,实现文件名简体中文转日语的便捷改名!

您是否曾经遇到过想要将文件名从简体中文翻译成日语&#xff0c;却苦于没有合适的工具&#xff1f;现在&#xff0c;让我们为您介绍一款便捷的解决方案——文件名简体中文转日语翻译工具&#xff01; 首先&#xff0c;第一步&#xff0c;我们需要打开文件批量改名&#xff0c;…

无涯教程-Perl - binmode函数

描述 此函数设置在区分两者的操作系统上以二进制形式读取和写入FILEHANDLE的格式。非二进制文件的CR LF序列在输入时转换为LF,在LF时在输出时转换为CR LF。这对于使用两个字符分隔文本文件中的行的操作系统(MS-DOS)至关重要,但对使用单个字符的操作系统(Unix,Mac OS,QNX)没有影…

付款方式谈得好,订单跑不了

在与客户商讨付款方式时出现分歧&#xff0c;其实是非常常见的情况。 在这种情况下&#xff0c;我们需要紧握谈判的节奏&#xff0c;不可忽视任何细节&#xff0c;更不能让自己陷入混乱之中。 先看一个案例~ 客户发来邮件&#xff1a; Dear... Please find our attached f…

远程访问桌面软件 OpenText Exceed TurboX(ETX)如何提高企业生产力

远程访问桌面软件 OpenText Exceed TurboX&#xff08;ETX&#xff09;如何提高企业生产力 几乎所有规模和行业的企业&#xff0c;员工的工作方式、时间和地点方面发生重大变化&#xff0c;这主要得益于新技术和全球商业与协作。业务领导者正在推动其 IT 部门提出解决方案&…

使用yarn启动项目报错

使用yarn启动项目报错 解决方法&#xff1a; 1.点击“开始”菜单搜索找到 Windows PowerShell ISE并以管理员身份运行(注&#xff1a;不是以管理员的身份直接运行cmd) 2. 输入 set-ExecutionPolicy RemoteSigned 回车 3.输入&#xff08;选择全是&#xff09; 4.再输入get-Exe…

【Linux】五、进程

一、冯诺依曼体系结构 存储器&#xff1a;指的是内存&#xff1b; 输入设备&#xff1a;键盘、摄像头、话筒&#xff0c;磁盘&#xff0c;网卡&#xff1b; 输出设备&#xff1a;显示器、音响、磁盘、网卡&#xff1b; 中央处理器&#xff08;CPU&#xff09;&#xff1a;运算器…

【架构】Java 系统架构演进的思考

文章目录 1 前言2 单体应用架构3 垂直应用架构4 分布式架构5 SOA 架构6 微服务云架构7 总结 1 前言 随着移动互联的发展&#xff0c;网站、H5、移动端的应用规模也不断扩大&#xff0c;不管是应用的数量还是质量都得到了指数级的提升。开发者的数量与日俱增&#xff0c;应用的…

Python实现GA遗传算法优化Catboost回归模型(CatBoostRegressor算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;最早是由美国的 John holland于20世…

The ‘kotlin-android-extensions‘ Gradle plugin is no longer supported.

Android使用kotlin开发&#xff0c;运行报错 The kotlin-android-extensions Gradle plugin is no longer supported. Please use this migration guide (https://goo.gle/kotlin-android-extensions-deprecation) to start working with View Binding (https://developer.an…

FPGA优质开源项目 - UDP RGMII千兆以太网

本文介绍一个FPGA开源项目&#xff1a;UDP RGMII千兆以太网通信。该项目在我之前的工作中主要是用于FPGA和电脑端之间进行图像数据传输。本文简要介绍一下该项目的千兆以太网通信方案、以太网IP核的使用以及Vivado工程源代码结构。 Vivado 的 Tri Mode Ethernet MAC IP核需要付…

HTTP——九、基于HTTP的功能追加协议

HTTP 一、基于HTTP的协议二、消除HTTP瓶颈的SPDY1、HTTP的瓶颈Ajax 的解决方法Comet 的解决方法SPDY的目标 2、SPDY的设计与功能3、SPDY消除 Web 瓶颈了吗 三、使用浏览器进行全双工通信的WebSocket1、WebSocket 的设计与功能2、WebSocket协议 四、期盼已久的 HTTP/2.01、HTTP/…

antv/l7地图,鼠标滚动,页面正常滑动-- 我们忽略的deltaY

背景 在官网项目中&#xff0c;需要使用一个地图&#xff0c;展示产品的分布区域及数量。希望的交互是&#xff0c;鼠标放上标点&#xff0c;tooltip展示地点和数量等信息。鼠标滚动&#xff0c;则页面随着滚动。但是鼠标事件是被地图代理了的&#xff0c;鼠标滚动意味着地图的…

yum出现Could not retrieve mirrorlist解决方法

Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http://mirrorlist.centos.org/?release6&archi386&repoos error was 14: PYCURL ERROR 6 - “Couldn’t resolve host ‘mirrorlist.centos.org…

revit建模理解

关于Revit族的理解 Revit 和族术语实心和空心形状几何图形类型 Revit 和族术语 图元 - Revit Architecture 项目中的任何内容。&#xff08;斜体图元可在族编辑器中创建和编辑。&#xff09; 模型图元 - 代表建筑的实际几何图形的内容。 主体图元 - 可以接收/支持其他模型图元…

Ansible环境搭建,CentOS 系列操作系统搭建Ansible集群环境

Ansible是一种自动化工具&#xff0c;基于Python写的&#xff0c;原理什么的就不过多再说了&#xff0c;详情参考&#xff1a;https://www.itwk.cc/post/403.html https://blog.csdn.net/qq_34185638/article/details/131079320?spm1001.2014.3001.5502 环境准备 HOSTNAMEIP…

apple pencil性价比高吗?比较好用的电容笔

从压力感、充电器、接口、以及价格上来看&#xff0c;这种平替电容笔都要比原装电容笔的要好得多。平替的电容笔只能给人一种倾斜的压感功能&#xff0c;但苹果的电容笔却是既拥有着倾斜压感功能&#xff0c;又拥有着重力的压感。另外&#xff0c;由于技术的不断发展&#xff0…

SpringBoot3---核心特性---2、Web开发III(模板引擎、国际化、错误处理)

星光下的赶路人star的个人主页 夏天就是吹拂着不可预期的风 文章目录 1、模板引擎1.1 Thymeleaf1.2 基础语法1.3 属性设置1.4 遍历1.5 判断1.6 属性优先级1.7 行内写法1.8 变量选择1.9 模板布局1.10 devtools 2、国家化3、错误处理3.1 默认机制3.2 自定义错误响应3.3 最佳实战 …