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

Peter算法小课堂—高精度减法

 给大家看个小视频高精度减法_哔哩哔哩_bilibili

基本思想

计算机模拟人类做竖式计算,从而得到正确答案

大家还记得小学时学的“减法竖式”吗?是不是这样

x-y问题

函数总览:

1.converts() 字符串转为高精度大数

2.le() 判断大小

3.sub() 将两个高精度大数相减

4.print() 输出一个高精度大数(删除前导0)

易错点

1.相减为负数时的处理

2.减法借位的处理

3.删除前导0

main()

int x[SIZE],y[SIZE];
int main(){
	string s1,s2;
	cin>>s1>>s2;
	converts(x,s1);
	converts(y,s2);
	if(le(y,x)){
		sub(x,y);
		print(x);
	}
	else{
		sub(y,x);
		cout<<"-";print(y);
	}
	return 0;
}

le()

bool le(int *a,int *b,int len=SIZE){
	int i;
	for(i=len-1;i>=0&&a[i]==b[i];i--);//判断等于 
	return i<0||a[i]<b[i];
}

方法图示

sub()

void sub(int *a,int *b,int len=SIZE){
	for(int i=0;i<len;i++)
		if((a[i]-=b[i])<0){
			a[i+1]--;
			a[i]+=10;
		}
}

借位图示

代码

#include <bits/stdc++.h>
using namespace std;
#define SIZE 550
int x[SIZE],y[SIZE];
void converts(int *a,string s){
	int i,len=s.size();
	for(i=0;i<len;i++) a[i]=s[len-i-1]-'0';
	for(;i<SIZE;i++) a[i]=0;
}
bool le(int *a,int *b,int len=SIZE){
	int i;
	for(i=len-1;i>=0&&a[i]==b[i];i--);//判断等于 
	return i<0||a[i]<b[i];
}
void sub(int *a,int *b,int len=SIZE){
	for(int i=0;i<len;i++)
		if((a[i]-=b[i])<0){
			a[i+1]--;
			a[i]+=10;
		}
}
void print(int *a){
	int i;
	for(i=SIZE-1;i>0;i--) if(a[i]>0) break;
	for(;i>=0;i--) cout<<a[i];
	cout<<endl;
}
int main(){
	string s1,s2;
	cin>>s1>>s2;
	converts(x,s1);
	converts(y,s2);
	if(le(y,x)){
		sub(x,y);
		print(x);
	}
	else{
		sub(y,x);
		cout<<"-";print(y);
	}
	return 0;
}

希望这些对大家有用,三连必回


http://www.kler.cn/news/148905.html

相关文章:

  • <HarmonyOS第一课>从简单的页面开始 【课后考核】
  • nvm:node版本控制工具
  • 【Electron】上下键切换消息
  • 【Rust】快速教程——自定义类型、数字转枚举、Cargo运行
  • ArrayList与顺序表的简单理解
  • JSP forEach标签varStatus使用讲解(了解即可 基本用不到)
  • Day 12 周日和周一
  • 【LeetCode】挑战100天 Day12(热题+面试经典150题)
  • CSS逻辑组合伪类
  • ArrayList 和 HashMap 源码解析
  • MFC mysql 往数据库中写路径时,斜杠消失
  • Axios 并发请求指南 - 3 种简单实用的方法
  • 深入Android S (12.0) 探索Framework之输入系统IMS的构成与启动
  • linux下ffmpeg安装
  • 2023极客大挑战-AGRT战队wp
  • 多线程(补充知识)
  • [nlp] tokenizer
  • 与中通支付对接
  • 前端 vue 面试题(二)
  • leaflet对线设置渐变色
  • LLM大语言模型
  • 深入redis过程-命令
  • 代码随想录算法训练营第四十九天【动态规划part10】 | 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II
  • Android:从源码看FragmentManager如何工作
  • Python内置类属性`__name__`属性的使用教程
  • WPF中DataGrid解析
  • Webshell混淆免杀的一些思路
  • 成绩排序(练习链表)
  • 《数据结构、算法与应用C++语言描述》-二叉树与其他树-二叉树的C++实现-设置信号放大器与并查集问题
  • Positive Technologies 公司发布了一种保护容器环境的产品 PT Container Security