大數加法
思路一:定義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 }
思路二,使用棧結構實現將輸入的數字依次存進棧中(棧有先進后出的特點,所以先輸入的高位上的數字會被存在棧的底層),在計算和的時候從兩個棧中依次取出數據相加存入新的棧中(計算時在棧頂的是個位,然后是十位,以此類推,存進新的棧時在棧底的是個位,然后是十位,以此類推),最后將存放計算結果的棧中元素自頂向底取出打印,這種方法效率較高,時間復雜度低,但是空間復雜度很大,需要占用較多的空間資源。