算法问题-大数相加
大数相加
比如远超long的数字相加,求其结果,需要用到数组,通过进位去实现
package algorithm.bignumbersum;
public class BigNumberSum {
/**
* 字符数组翻转
* 12345 3 04 13 22
* 1234 2 03 12
*
* 同时进行末尾补零,方便下面的运算
*/
public static int[] reverse(String str, int maxLen){
char[] chars = str.toCharArray();
int[] array = new int[maxLen];
for (int i = chars.length-1 ; i >=0; i--) {
array[chars.length-i-1] = chars[i]-'0';
}
return array;
}
//去掉翻转后高位的零
public static String reverse(int[] ints){
StringBuffer sb = new StringBuffer();
for (int i = ints.length-1; i >=0; i--) {
if(ints[i]!=0){
sb.append(ints[i]);
}else{
continue;
}
}
return sb.toString();
}
/**
* 大整数相加
* 思路拆分成数组 然后进位
*/
public static String bigNumberSum(String num1,String num2){
/**
* 先把数组翻转
* 12345+123 可以转换成 54321+321 从左向右做加法
*
*/
int maxLen = num1.length()>num2.length()?num1.length():num2.length();
int[] n1 = reverse(num1,maxLen);
int[] n2 = reverse(num2,maxLen);
int[] res = new int[maxLen+1];
for (int i = 0; i < maxLen; i++) {
int temp = n1[i] + n2[i];
//考虑 十进制 进位问题
if(temp>=10) {
res[i + 1] = 1;
temp -=10;
}
res[i]=temp;
}
return reverse(res);
}
public static void main(String[] args) {
//12345+123 = 12468
System.out.println(bigNumberSum("12345","123"));
}
}
不恋尘世浮华,不写红尘纷扰
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2020-11-30 转载-mysql 数据库的设计三范式
2020-11-30 转载-Java 为什么是值传递