Java實現大數加法運算的幾種方法


大數加法

思路一:定義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 }
largenumberOperationAdd

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM