news 2026/6/26 11:29:11

算法讲解12:高精度加减法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法讲解12:高精度加减法

前言:众所周知,我们在处理一个整数时,一般用int[-2^31,2^31-1],或者long[-2^63,2^63-1],但即使这样也有更大的数,所以我们要将整数转化为字符的形式,那么这里补充字符的比较原则:

abc<acb //同位数,从前往后比,a=a,c>b,到此为止就能出答案

ab<abc //不同位数,两者前缀都是ab,那么abc多个c,右边大

ac>abc //前缀不同,a=a,c>b,左边大

原理:

将123456存入数组s,s[0]=6,s[1]=5,以此类推,为什么要倒着推:方便对其位数

比如1234和12,正着推,s[0]=1,s[1]=2,s[2]=3,s[3]=4,a[0]=1,a[1]=2,如此对照下会出现千位对十位,百位对个位的情况

[1,2,3,4,5,6]

[7,8,9]

对位相加,(下面的数组位数不够,要高位补零)->[8,0,3,5,5,6]

条件:位数非常大或者需求精度非常高

注意:输入字符串,存储数组,在运算减法时会出现负数,需要额外逻辑

代码演示:加法+减法

package 博客; import java.util.Scanner; public class 高精度加法 { static int a[] =new int [100005]; static int b[]=new int [100005]; static Scanner sc=new Scanner(System.in); public static int ab(int c[]) { String aabb=sc.nextLine(); for(int i=0;i<aabb.length();i++) { c[i] = aabb.charAt(aabb.length() - 1-i)-'0';//倒着处理,-'0'就不会输出ASCLL码 } return aabb.length(); } public static void main(String[] args) { int la=ab(a);//排序完成 int lb=ab(b); sc.close(); int c[]=new int [100006]; int d[]=new int [100006]; //比ab两数组多一位进位空间 for(int i=0;i<Math.max(la,lb);i++) { c[i]+=a[i]+b[i]; if(c[i]>=10) { c[i]-=10; c[i+1]++; } } //下一步取出所有前置的0 for(int i=c.length-1;i>0;i--) { if(c[i]!=0) { for(int j=i;j>=0;j--) { System.out.print(c[j]+" "); } break; } } for(int i=0;i<Math.max(la,lb);i++) { d[i]+=a[i]; d[i]-=b[i]; if(d[i]<0) { d[i]+=10; d[i+1]--; } } int shifo1=0;//如果出了负数就倒着来 for(int p=d.length-1;p>0;p--) { if(d[p]<0) { shifo1=1; int e[]=new int [100006]; for(int i=0;i<Math.max(la,lb);i++) { e[i]-=a[i]; e[i]+=b[i]; if(d[i]<0) { e[i]+=10; e[i+1]--; } } System.out.print("- "); for(int i=e.length-1;i>0;i--) { if(e[i]!=0) { for(int j=i;j>=0;j--) { System.out.print(e[j]+" "); } break; } } } } //考虑到为0无法输出0,设置shifo2 int shifo2=0; if(shifo1==0) { for (int i = d.length - 1; i > 0; i--) { if (d[i] != 0) { for (int j = i; j >= 0; j--) { System.out.print(d[j] + " "); shifo2 = 1; } break; } } if (shifo2 == 0) { System.out.println("0"); } } } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/26 0:50:01

LangFlow深度解析:如何用图形化界面玩转LangChain应用

LangFlow深度解析&#xff1a;如何用图形化界面玩转LangChain应用 在大模型浪潮席卷各行各业的今天&#xff0c;越来越多团队希望快速构建基于语言模型的智能系统——从客服机器人到内部知识助手&#xff0c;从自动化报告生成到多工具协同的AI代理。但现实是&#xff0c;即便有…

作者头像 李华
网站建设 2026/6/25 22:48:12

2026中专学历考会计,可以从哪个证书开始?

&#x1f9ed;2026 年&#xff0c;会计行业已从 “账房先生” 的传统模式&#xff0c;升级为 “财务核算 数据分析” 的复合型人才需求模式。对中专学历的会计从业者而言&#xff0c;学历并非职业发展的 “天花板”&#xff0c;选对入门证书筑牢根基&#xff0c;再搭配 CDA 数…

作者头像 李华
网站建设 2026/6/27 3:30:29

Android SO库缺失终极修复指南

核心目标&#xff1a;解决 library not found、dlopen failed、UnsatisfiedLinkError 等 Native 层崩溃。 适用场景&#xff1a;腾讯会议、Flutter 应用或定制 APK 在 ARM/x86 设备&#xff08;特别是 RK3566 等定制系统&#xff09;上无法启动。 &#x1f50d; 第一阶段&#…

作者头像 李华
网站建设 2026/6/26 16:56:11

LangFlow支持WebSocket通信,实现实时AI交互

LangFlow 支持 WebSocket 通信&#xff0c;实现实时 AI 交互 在构建大语言模型&#xff08;LLM&#xff09;应用的今天&#xff0c;开发者越来越需要一种既能快速验证想法、又能实时观察执行过程的开发方式。传统的编码模式虽然灵活&#xff0c;但在调试复杂链路、展示生成流程…

作者头像 李华
网站建设 2026/6/26 13:26:52

基于Python+大数据+SSM温布尔登特色赛赛事数据分析可视化平台(源码+LW+调试文档+讲解等)/温布尔登赛事分析/温布尔登数据可视化/温布尔登特色赛事/温布尔登赛事平台/赛事数据分析平台

博主介绍 &#x1f497;博主介绍&#xff1a;✌全栈领域优质创作者&#xff0c;专注于Java、小程序、Python技术领域和计算机毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2025-2026年最新1000个热门Java毕业设计选题…

作者头像 李华
网站建设 2026/6/26 9:12:18

新手必看:UDS 19服务开发入门基础

新手必看&#xff1a;从零理解 UDS 19 服务开发核心要点你有没有遇到过这样的场景&#xff1f;车辆仪表盘突然亮起一个故障灯&#xff0c;维修师傅接上诊断仪&#xff0c;几秒钟后就告诉你&#xff1a;“BMS 检测到电池单体压差过大&#xff0c;DTC 编号是P1A3215&#xff0c;状…

作者头像 李华