#include <iostream>
#include <sstream>
using namespace std ;
int main() {
stringstream ss ;
string s ;
while( getline( cin , s ) ) {
ss.clear() ;
ss.str(s) ;
int odd = 0 , even = 0 ;
string a ;
while( ss >> a ) {
if( ( a[0] - '1' + 1 ) % 2 != 0 ) { //寫到這邊有點沒頭緒 , 是要先判斷a[0]是基數還是偶數嗎? 後面把string轉float該怎麼轉換
a.erase( a.begin() , a.begin() + 2 ) ;
odd += num ;
}
}
cout << odd - even << endl ;
}
return 0 ;
}
if( ( a[0] - '1' + 1 ) % 2 != 0 ) { //寫到這邊有點沒頭緒 , 是要先判斷a[0]是基數還是偶數嗎? 後面把string轉float該怎麼轉換
1. 題目沒說序號只有一位數,所以無法用a[0]來判斷奇數偶數(可以用a.find(":")找出位置,再把序號和實數分開)
2. string轉float可以用stof()
那請問要怎麼儲存他阿
用一個陣列 把他轉換成序號跟數值嗎?
像是 1:12.5 要怎麼把它分開成 1 跟 12.5 阿。 用find 找出第幾位數再用for跑嗎?(還想請問有辦法把一個空字串中插入東西像是a[0],a[1]這樣嗎)
謝謝~
那請問要怎麼儲存他阿
用一個陣列 把他轉換成序號跟數值嗎?
像是 1:12.5 要怎麼把它分開成 1 跟 12.5 阿。 用find 找出第幾位數再用for跑嗎?(還想請問有辦法把一個空字串中插入東西像是a[0],a[1]這樣嗎)
謝謝~
例如find找出第幾位數放在變數pos:
前面的序號只要知道奇數或偶數,所以只要判斷a[pos-1]就好,後面的實數可以用a.substr(pos+1)來取得。
substr的說明:https://www.cplusplus.com/reference/string/string/substr/
真的很感謝欸,老像都是你在回覆我~
為什麼會這麼閒XD
我現在看別人的程式碼還會看到不懂ㄟXDDD
我好像有點浪費版面欸XD
WA (line:6)
#include <iostream> #include <sstream> using namespace std ; int main() { stringstream ss ; string s ; while( getline( cin , s ) ) { ss.clear() ; ss.str(s) ; float odd = 0 , even = 0 ; string a , sss ; while( ss >> a ) { int num = a.find(':') ; sss = a.substr( num + 1 ) ; if( a[num-1] % 2 != 0 ) { odd += stof(sss) ; } else { even += stof(sss) ; } } cout << odd - even << endl ; } return 0 ; }
我好像有點浪費版面欸XD
WA (line:6)
#include <iostream> #include <sstream> using namespace std ; int main() { stringstream ss ; string s ; while( getline( cin , s ) ) { ss.clear() ; ss.str(s) ; float odd = 0 , even = 0 ; string a , sss ; while( ss >> a ) { int num = a.find(':') ; sss = a.substr( num + 1 ) ; if( a[num-1] % 2 != 0 ) { odd += stof(sss) ; } else { even += stof(sss) ; } } cout << odd - even << endl ; } return 0 ; }
您的答案為: -351.251
正確答案為: -351.252
你試試用double,他的精準度比float高
stof也可以換成stod