大数加法
思路一:定义String变量str1和str2分别存储输入的两个大数,定义num1[]和num2[]两个int型数组,将两个字符串分别逐个字符逆序存入数组,定义sum[]数组存放求和结果,使用循环两个数组中的元素逐位相加,并判断是否进位,最后逆序输出数组sum[]中的每个元素。
1 import java.util.Scanner; 2 3 public class largenumberOperationAdd { 4 public static void main(String[] args){ 5 Scanner sc=new Scanner(System.in); 6 System.out.println("请输入第一个高位整数:"); 7 String str1=sc.next(); 8 System.out.println("请输入第二个高位整数:"); 9 String str2=sc.next(); 10 int[] num1=new int[str1.length()]; //num1[]存储第一个大数 11 int[] num2=new int[str2.length()]; //num2[]存储第二个大数 12 int len=1+Math.max(str1.length(),str2.length());//找到两个大数中位数更高的一个并+1,设置为求和数组的长度 13 int[] sum=new int[len]; //sum[]存储两大数之和 14 for (int a=0;a<str1.length();a++){ 15 //将str1数字逐个倒序放入数组num1[] 16 num1[str1.length()-a-1]=Integer.parseInt(str1.substring(a,a+1)); 17 } 18 for (int b=0;b<str2.length();b++){ 19 //将str2数字逐个倒序放入数组num2[] 20 num2[str2.length()-b-1]=Integer.parseInt(str2.substring(b,b+1)); 21 } 22 int overflow=0; 23 for (int i=0;i<len-1;i++){ 24 //逐位相加,满10进1 25 sum[i]=num2[i]+num1[i]+overflow; 26 if (sum[i]>=10){ 27 sum[i]=sum[i]%10; 28 overflow=1; 29 }else{ 30 overflow=0; 31 } 32 } 33 for (int j=len-1;j>=0;j--){ 34 System.out.print(sum[j]); 35 } 36 } 37 }
思路二,使用栈结构实现将输入的数字依次存进栈中(栈有先进后出的特点,所以先输入的高位上的数字会被存在栈的底层),在计算和的时候从两个栈中依次取出数据相加存入新的栈中(计算时在栈顶的是个位,然后是十位,以此类推,存进新的栈时在栈底的是个位,然后是十位,以此类推),最后将存放计算结果的栈中元素自顶向底取出打印,这种方法效率较高,时间复杂度低,但是空间复杂度很大,需要占用较多的空间资源。