用c++實現高精度加法


c++實習高精度加法

 

最近遇到一個c++實現高精度加法的問題,高精度問題往往十復雜但發現其中的規律后發現並沒有那么復雜,這里我實現了一個整數的高精度加法,主要需要注意以下幾點:

 

1:將所需輸入的數據以字符數組的形式輸入,建立字符數組,建立相應的整數數組,然后一一映射,以此來實現數據的輸入,需要注意的是,當實現字符向數字映射時,應該減去相應的ASCII偏移值,即48。

 

2:為了模擬我們在紙上手算的進位模擬運算,我們將字符數組反向填入整數數組,上圖的后幾行代碼實現了這個操作。

 

3:實現進位加法,這是整個代碼的核心部分,需要讀者細細體會,認真揣摩,往往需要反復思考,容易遺忘

 

4:反向輸出數據。因為我們的加法是將數組反置,然后由左到右想加的,加完后,個數位在左邊,所以,需要反向輸出

 

 

以下是全部代碼:

    #include<iostream>  
    #include<cstdio>  
    #include<cstring>  
    using namespace std;  
    int main()  
    {  
        char a1[100],b1[100];  
        int a[100],b[100],c[100];  
        int a1_len,b1_len,lenc,i,x;  
        memset(a,0,sizeof(a));   
        memset(b,0,sizeof(b));   
        memset(c,0,sizeof(c));  
          
        gets(a1);   
        gets(b1); //輸入加數與被加數   
           
        a1_len=strlen(a1);   
        b1_len=strlen(b1);   
       
        for (i=0;i<=a1_len-1;i++)   
        {  
            a[a1_len-i]=a1[i]-48; //將操作數放入a數組    
        }  
           
        for (i=0;i<=b1_len-1;i++)  
        {  
            b[b1_len-i]=b1[i]-48; //將操作數放入b數組   
        }   
        
      
       lenc =1;   
       x=0;   
          
       while(lenc <=a1_len || lenc <=b1_len)   
       {   
            c[lenc]=a[lenc]+b[lenc]+x; //兩數相加    
            x=c[lenc]/10;   //要進的位  
            c[lenc]=c[lenc]%10;     //進位后的數  
            lenc++;     //數組下標加1  
        }  
          
        c[lenc]=x;  
        if (c[lenc]==0)  
        {  
            lenc--; //處理最高進位   
        }   
          
        for (i=lenc;i>=1;i--)  
        {  
            cout<<c[i]; //輸出結果      
        }  
        cout<<endl;  
          
        return 0;  
    }  

 


免責聲明!

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



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