大數加法
阿新 • • 發佈:2017-05-16
結果 || 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"); }
大數加法