【模板小程序】大數相加(十進制),包含合法性檢查
阿新 • • 發佈:2017-07-29
str coder als .com reverse == 代碼 car hot
1 //大數相加(十進制),用string處理 2 #include <iostream> 3 #include <string> 4 #include <algorithm> 5 6 using namespace std; 7 8 //輸入數據合法性檢查,數字必須在0-9範圍內 9 bool IsVaild(const string& num1,const string& num2) 10 { 11 for(auto val:num1) 12 { 13 if(!(val>=‘0‘ && val-‘0‘<=‘9‘)) 14 return false; 15 } 16 for(auto val:num2) 17 { 18 if(!(val>=‘0‘ && val<=‘9‘)) 19 return false; 20 } 21 return true; 22 } 23 24 string greatNumberAdd(string num1,string num2) 25 { 26 constsize_t len1=num1.length(); 27 const size_t len2=num2.length(); 28 const size_t n=len1>len2 ? len1 :len2; 29 reverse(num1.begin(),num1.end()); 30 reverse(num2.begin(),num2.end()); 31 32 string result; 33 int carry=0; 34 for(size_t i=0;i<n;++i) 35 { 36 constint num1i = i<len1 ? num1[i]-‘0‘ :0; 37 const int num2i = i<len2 ? num2[i]-‘0‘ :0; 38 const int val = (num1i+num2i+carry)%10; 39 carry=(num1i+num2i+carry)/10; 40 result.insert(result.begin(),val+‘0‘); 41 } 42 if(1==carry)//若最前面有進位,則插入‘1‘ 43 result.insert(result.begin(),‘1‘); 44 45 return result; 46 } 47 48 int main() 49 { 50 string num1,num2; 51 while(cin>>num1>>num2) 52 { 53 if(IsVaild(num1,num2)) 54 cout<<greatNumberAdd(num1,num2)<<endl; 55 else 56 cout<<"輸入數據不合法"<<endl; 57 } 58 return 0; 59 }
代碼借鑒了牛客網“贊一下”用戶的思想,在此感謝,原題目參見https://www.nowcoder.com/questionTerminal/5821836e0ec140c1aa29510fd05f45fc?orderByHotValue=0&mutiTagIds=578_579&page=2&onlyReference=false。
【模板小程序】大數相加(十進制),包含合法性檢查