1. 程式人生 > >大數加法

大數加法

結果 || i++ 對齊 tail printf cst 大數 參考

http://blog.csdn.net/u010258605/article/details/44308149

參考自以上博客。

/**
    Description: 

    Arguments:

    Returns:
(1) 數據的輸入

(2) 數據的存儲

(3)數據的運算:進位和借位

(4)結果的輸出:小數點的位置和處於多余的0 


*/
#include <cstdio>
#include <cstring>
int main()
{
    char a[500],b[500];
    scanf("%s %s",a,b);
    int lena=strlen(a),lenb=strlen(b);
    
int aa[500],bb[500],cc[500]; memset(aa,0,sizeof(aa)); memset(bb,0,sizeof(bb)); memset(cc,0,sizeof(cc)); //將字符串轉換成數組 for(int i=0;i<=lena-1;i++) { aa[lena-i]=a[i]-48;//倒著儲存數字a[]={1,2,3},aa[]={3,2,1};從1開始的, } for(int i=0;i<=lenb-1;i++) { bb[lenb
-i]=b[i]-48;//倒著儲存數字a[]={1,2,3},aa[]={3,2,1};從1開始的, } // 運算 進位和借位 int th=1,x=0;//豎式運算時個位對齊,一位一位往前加; //x為進位的數字,th為第幾位; while(th<=lena||th<=lenb) { cc[th]=aa[th]+bb[th]+x; x=cc[th]/10;//進位是幾; cc[th]%=10;//本位是幾; th++;//位數加一 } cc[th]=x;
if(cc[th]==0)//如果最高位為零就不輸出,所以位數減一; { th--; } for(int i=th;i>=1;i--) { printf("%d",cc[i]); } printf("\n"); }

大數加法