当前位置: 首页 > news >正文

算法题(119):高精度减法

审题:

本题高精度减法主要是要区分正负号,然后进行模拟

思路:
方法一:模拟法

首先本题需要我们利用字符串进行大数相减

第一步:区分s1和s2谁更大

先从数的位数进行判断,然后再从高到低的位数进行判断

第二步:确认谁大谁小后进行减法模拟

利用minus控制借位,借了为就置为-1,没有借就置为0

解题:

(1)主函数逻辑

int main()
{
	cin >> s1 >> s2;
	bool judge = true;
	//判断大小
	if (s1.size() > s2.size())
	{
		minor(s1, s2);
		judge = false;
	}
	else if(s1.size()<s2.size())
	{
		minor(s2, s1);
	}
	else
	{
		int i = 0;
		while (i < s1.size() )
		{
			if (s1[i] >= s2[i])
			{
				minor(s1, s2);
				judge = false;
				break;
			}
			else if (s1[i] < s2[i])
			{
				minor(s2, s1);
				break;
			}
				i++;
		}
	}
	if (judge)//负数
	{
		cout << '-' << output;
	}
	else//正数
	{
		if (output[0] == '0'){
			cout << 0;
		}
		else{
			cout << output;
		}
	}
	return 0;
}

第一步:判断大小并确认进入减法模拟的参数顺序,将大的数放在前面传参,小的数放在后面传参。并且用judge记录数的最终正负号,若是正数就是false,负数就是true

第二步:根据judge的状态对output进行输出

特殊处理:如果结果为0需要特殊处理,否则会输出很多个0

(2)减法模拟

void minor(string s1, string s2)
{
	int minus = 0;//负数
	size_t big = s1.size();
	size_t small = s2.size();
	while (big > 0 || small > 0)
	{
		int cur = minus;
		if(big > 0)
		{
			big--;
			cur += s1[big]-'0';
		}
		if (small > 0)
		{
			small--;
			cur -= s2[small]-'0';
		}
		char ch;
		if (cur < 0)//需要借位
		{
			 ch = cur + 10 + '0';
			minus = -1;
		}
		else//无需借位
		{
			 ch = cur + '0';
			minus = 0;
		}
		output = ch + output;
	}
}

最终的数分两步进行计算

第一步:将借位数minus,s1字符串对应位和s2字符串对应位进行计算

第二步:若结果为负数就需要借位,将minus置为-1,不为负数就不用借位,将minus置为0

P2142 高精度减法 - 洛谷

相关文章:

  • Linux基础IO(一)之回顾C语言文件接口
  • Base64是密码吗?编码与加密的本质区别
  • 2018年真题
  • Java 三大特性—多态
  • 海外直播平台交互设计师简历模板
  • 【PVR Review】《Review of Deep Learning Methods for Palm Vein Recognition》
  • 新HTML5
  • 4.3-1 jenkins安装
  • 全国大学生数学建模竞赛赛题深度分析报告(2010-2024)
  • MySQL学习笔记(四)——DML和DQL
  • 智能手表该存什么音频和文本?场景化存储指南
  • 《算法笔记》10.3小节——图算法专题->图的遍历 问题 B: 连通图
  • 测开八股收集
  • 【C++编程基础-关键字】:define和inline的区别
  • 在 Ubuntu 下通过 Docker 部署 PSQL 服务器的详细技术博客
  • codeforces B. Large Array and Segments
  • 【漫话机器学习系列】184.正态分布(Normal Distribution)
  • 青少年编程与数学 02-015 大学数学知识点 05课题、优化理论
  • zk源码—2.通信协议和客户端原理二
  • QML和C++交互
  • 高要网站建设/怎么用模板做网站
  • 莱芜网站建设优化/微指数官网
  • 网站建设技术方案模板下载/自己怎么搭建网站
  • 做网站来钱快/百度推广账号怎么注册
  • 建购物网站需要多少钱/windows优化大师要会员
  • 政府网站建设多少钱/网站seo优化方法