PAT-乙-1074 1074 宇宙無敵加法器 (20 分)
阿新 • • 發佈:2018-11-03
程式碼
#include <iostream> using namespace std; int main() { string s, s1, s2; cin>>s>>s1>>s2; while(s1.length()<s.length()){ s1 = "0" + s1; } while(s2.length()<s.length()){ s2 = "0" + s2; } int jinwei = 0; char ans[21] = {'0'}; for(int i=s.length()-1; i>=0; i--){ int tmp = s1.at(i)-'0' + s2.at(i)-'0' + jinwei; int radix = s.at(i)-'0'; if(!radix){ radix = 10; } jinwei = tmp/radix; int remind = tmp%radix; ans[i+1] = remind+'0'; } if(jinwei){ ans[0] = jinwei + '0'; } bool flag = true; for(int i=0; i<s.length()+1; i++){ if(flag && ans[i]!='0'){ flag = false; cout<<ans[i]; } else if(!flag){ cout<<ans[i]; } } if(flag){ cout<<0; } cout<<endl; return 0; }
註解
1、注意補齊兩個輸入資料的位數,與進位制的位數保持一致。
2、0進位制轉換成10進位制。
3、首位可能有進位,因此ans的位元組陣列長度可能超過20,定義為21。(否則錯三個case)
4、結果可能為0。(否則錯一個case)
5、忽略前導0。
6、此種題目建議用char陣列,最好不要用string。