方法一:
import java.math.BigDecimal; /** * 两个大数相加 * * @author * @version $Id: BigNumberAdd.java, v 0.1 2014年8月18日 下午2:13:20 */ public class BigNumberAdd1 { public static void main(String[] args) { String num1 = "34646313135453431"; String num2 = "999999999121111"; int len1 = num1.length(); int len2 = num2.length(); if(len1 > len2){ for(int i=0; i<len1 - len2; i++){ num2 = "0" + num2; } } else if (len1 < len2){ for(int i=0; i<len2-len1; i++){ num1 = "0" + num1; } } int[] arr1 = str2intArr(num1); int[] arr2 = str2intArr(num2); arr1 = reverse(arr1); arr2 = reverse(arr2); int[] result = add(arr1, arr2); for(int i=result.length-1; i>=0; i--){ if(i == result.length-1 && result[i] == 0) continue; System.out.print(result[i]); } System.out.println(); System.out.println("****************以下为对照结果******************"); BigDecimal b1 = new BigDecimal(num1); BigDecimal b2 = new BigDecimal(num2); BigDecimal b3 = b1.add(b2); System.out.println(b3); } /** * 核心方法 两个整型数组相加 * * @param a * @param b * @return */ public static int[] add(int[] a,int[] b){ int maxlen = a.length; int[] sum = new int[maxlen + 1]; for(int i=0; i<maxlen; i++){ int tempSum = a[i] + b[i]; sum[i] += tempSum % 10; int d = tempSum / 10; // 进位 sum[i+1] += d; } return sum; } /** * 将字符串转换成整型数组 * * @param str * @return */ public static int[] str2intArr(String str){ int len = str.length(); int[] arr = new int[len]; for(int i=0; i<len; i++){ arr[i] = str.charAt(i) - '0'; } return arr; } /** * 倒置数组元素 * * @param arr * @return */ public static int[] reverse(int[] arr){ for(int i=0,j=arr.length-1;i<j; i++,j--){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } return arr; } public static void print(int[] arr){ for(int i=0; i<arr.length; i++){ System.out.print(arr[i]); } System.out.println(); } }
方法二:
public class BigNumberAdd2 { public static void main(String[] args) { String str1 = "34646313135453431"; String str2 = "999999999121111"; int len1 = str1.length(); int len2 = str2.length(); if(len1 > len2){ for(int i=0; i<len1-len2; i++){ str2 = "0" + str2; } } else if(len1 < len2){ for(int i=0; i<len2-len1; i++){ str1 = "0" + str1; } } System.out.println(add(str1, str2)); } public static String add(String str1, String str2){ boolean flag = false; String result = ""; for(int i=str1.length()-1; i>=0; i--){ int a = str1.charAt(i) - '0'; int b = str2.charAt(i) - '0'; int sum = 0; if(flag){ sum = 1; } sum += (a + b); if(sum / 10 > 0){ flag = true; } else { flag = false; } result = sum % 10 + result; } return result; } }
方法三:
public class BigNumberAdd3 { public static void main(String[] args) { String num1 = "34646313135453431"; String num2 = "999999999121111"; int len1 = num1.length(); int len2 = num2.length(); if(len1 > len2){ for(int i=0; i<len1 - len2; i++){ num2 = "0" + num2; } } else if (len1 < len2){ for(int i=0; i<len2-len1; i++){ num1 = "0" + num1; } } int[] arr = new int[len1 + 1]; for(int i=len1-1; i>=0; i--){ int a = num1.charAt(i) - '0'; int b = num2.charAt(i) - '0'; arr[i+1] = a + b; } for(int i=len1; i>0; i--){ int temp = arr[i]; arr[i] = temp % 10; arr[i-1] = arr[i-1] + temp / 10; } String result = toString(arr); if(result.charAt(0) == '0') { result = result.substring(1); } System.out.println(result); } public static String toString(int[] arr){ StringBuilder sb = new StringBuilder(); for(int i=0; i<arr.length; i++){ sb.append(arr[i]); } return sb.toString(); } }
相关推荐
本主题将深入探讨如何通过字符串实现大数相加,这是一种常见的大数处理方法。 一、大数相加的背景与需求 在日常编程中,我们通常使用诸如int、long等基本数据类型来存储和操作数字。然而,当需要处理的数字非常大...
2. 检查两个大数的长度,如果长度不同,将较短的数在其前面补零,以确保它们具有相同的长度。 3. 遍历两个字符串,从低位到高位逐位相加,同时考虑当前位和上一位的进位。 4. 如果在某一位上相加后结果超过9,需要...
- 初始化:创建两个数组分别存储两个大数,以及一个数组用于存储结果。 - 搭配进位:从低位到高位,逐位进行加法运算,同时考虑当前位的进位。对于每一位,我们只需处理两个数组对应位置的元素加上上一位的进位值...
2. 检查两个大数的长度,如果一个数的位数多于另一个,可以添加前导零以保持长度一致。 3. 遍历两个数组,从低位到高位,对对应位进行相加,同时考虑进位。 4. 如果有进位,将其加到下一位的和中。 5. 最后,检查...
采用单链表的做的,以一万分界点,每个节点有四位数
C++实现大数相加 C++作为一门功能强大且灵活的编程语言,在实现大数相加时提供了多种方法。下面我们将探讨使用C++实现大数相加的方法。...使用C++实现大数相加是一种非常实用的方法,可以满足各种计算需求。
该方法将两个大数(以字符串形式存储)作为输入参数,返回它们的和(同样以字符串形式)。首先,它会判断两个数哪个更长,并将较短的数附加到较长数的末尾,然后逐位进行加法运算。在每一步中,如果当前位的和超过9...
总的来说,使用`std::string`实现大数相加是一种直观且易于理解的方法,尤其在不依赖特定的大数库的情况下。然而,在实际应用中,为了获得更好的性能和更完善的功能,可能会选择使用如GMP(GNU Multiple Precision ...
用c++编写的大数相加,可以实现任意两个长度的大数相加求和。
5. 最后,结果链表就代表了两个大数的和,可以以适当的形式输出,如转化为字符串。 在这个VS2017项目中,`mytest1.sln`是解决方案文件,包含了整个项目的配置信息。`.vs`文件夹是Visual Studio的工作区文件,包含了...
3. **比较大数**:在相加前,可能需要比较两个大数的大小,以便确定相加时的高位。可以从前向后逐位比较,直到找到不同的位或者到达数组末尾。 4. **大数相加**:这是一个关键步骤,可以采用类似于小学数学中的竖式...
这里我们关注的焦点是大数相乘、大数相加以及大数阶乘的算法实现,这些都是计算密集型任务,尤其是在处理极端数值时。下面将详细介绍这三个知识点,并提供一个使用C++实现的示例。 1. **大数相乘**: 大数相乘通常...
该文件为C/C++课程对于大数相加问题的解决, /*大数相加*/ /*在一般语言中对整型数都有个最大限制, 先给出两个超出正常范围的十进制数 对其进行求和,带进位的加法*/
在实现大数相加功能时,首先考虑如何比较两个大数的大小,以便确定在哪个数字的末尾添加进位。可以编写一个`compare`函数,比较两个`BigInt`对象的字符串表示。如果第一个字符串在任何位置上都小于第二个字符串,...
总结,通过链表实现大数相加是一种常见的算法思路,它利用链表的动态扩展性和顺序访问特性,可以方便地处理任意长度的大整数相加。在C#中,我们可以通过定义链表节点类和链表类,以及编写相应的操作方法来实现这个...
在给定的"两个大数相加"的场景中,我们可以预期包含的代码将演示如何实现这个功能。下面我们将深入探讨相关的C++知识点。 首先,我们要理解C++的标准库并不直接支持大数运算。因此,我们需要自己设计一个数据结构来...
3. **初始化栈**:创建两个栈,分别存储两个大数的每一位。由于栈是后进先出的数据结构,我们从低位到高位将大数的每一位压入栈中。 4. **进行加法运算**: - 初始化一个临时变量`carry`(进位)为0。 - 当两个栈...
描述中提到的“Java语言实现的大数相加程序”,意味着这个程序采用了特定的算法来处理两个大数的加法。简单算法可能是指逐位相加,类似于我们手工计算的方式,即从低位到高位,每两位进行相加,如有进位则向上一位...
在给定的`js代码-两个大数相加`主题中,我们可以探讨两种主要的方式来实现大数相加: 1. 字符串处理: 由于JavaScript的字符串可以无限长度,我们可以通过将大数转换为字符串,然后逐位相加来实现大数的加法。具体...
C++实现的大数相加,有很好的类的封装性