
所有的計算最后都是轉(zhuǎn)換成二進制進行計算的,所以浮點計算時候,有時會出現(xiàn)精度流失的問題。
解決方法:
盡量轉(zhuǎn)換成long型計算,最后再換成浮點型輸出結(jié)果。
查詢數(shù)據(jù)是否存在刷題時候測試點也不一定會考察這方面,但當(dāng)很多個浮點型數(shù)據(jù)運算時候丟失精度就更明顯了。當(dāng)題目中告訴我們每個數(shù)的小數(shù)點最高幾位的時候,我們還是最好先轉(zhuǎn)換成long型最后再換回來,這樣更為準(zhǔn)確。
如果可以在set和map中進行查詢find,就別在vector容器中查詢用find,因為vector中的find的algorithm的find,時間復(fù)雜度是O(n),而set和map是自帶的函數(shù),內(nèi)部結(jié)構(gòu)是紅黑樹。
但是如果是set和map的話,用count就可以了,因為他們內(nèi)部都不是重復(fù)的。時間復(fù)雜度和find一樣是(logn);
用map.count(key)是否大于0查找數(shù)據(jù)應(yīng)該是用的比較多的。
有時需要把答案放在容器內(nèi),然后把所寫的放另一個容器里,比較是否與答案相等,這個時候就有必要用到容器之間是否相等。
容器之間比較內(nèi)部所有元素是否相等,可以直接用**==**
如果兩個容器的長度相同且對應(yīng)位置元素都相等,則兩個容器就相等,否則不等。
和Java中重寫equals后用equals方法有點像。
使用cin輸入數(shù)據(jù)后,會殘留空格或者回車符在緩存區(qū)中;
使用getline輸入數(shù)據(jù)后,不會有回車在緩存區(qū)中。
#include#includeusing namespace std;
int main(){char ch;
string s,s1;
cin >>s;
getline(cin,s1);
cout<< s<< endl;
cout<< s1<< endl;
} 輸入:
a b
輸出:
a
b
輸入:
ab
輸出:
ab
出現(xiàn)需要處理字符的原因:
是因為cin遇到空格或者回車字符時,是作為結(jié)束符的,但是其本身還是存留在緩沖中,遇到要么作為結(jié)束符要么就是直接跳過。既然在緩沖中,如果不需要就需要將其除去;
解決方法:

cin肯定是比scanf方便的,但有很多時候還是用scanf比較的好。
比如要輸入年:月:日用cin肯定是不好實現(xiàn)的,用scanf("%d:%d:%d",&year,&month,&day);肯定會方便簡潔。
并且學(xué)會輸入數(shù)據(jù)的同時,處理數(shù)據(jù),這樣可以達到簡潔代碼,防止代碼重復(fù)。
下面就是個好例子:
使用數(shù)組達到hash的目的是比使用map要方便很多的,我們可以利用它的索引以及對應(yīng)的值表示不同的含義。
比如:
索引表示學(xué)號,值表示排名;
索引表示學(xué)號,值表示是否存在;
索引表示時間,值表示數(shù)據(jù)量;
索引表示某字符的ASCII碼,值表示是否存在等等。
通過hash數(shù)組,可以讓我們查詢結(jié)果更快,效率更高!
bool is_prim(int n){if(n<2) return false;
for(int i=2;i*i<=n;++i){if(n%i==0) return false;
}
return true;
}倆數(shù)大公約與最小公倍假設(shè)有倆數(shù)a和b,大公約數(shù)gcd和最小公倍數(shù)lcm的乘積應(yīng)該為a*b;
大公約數(shù):
//a大于b
int gcd(int a,int b){return a%b==0?b:gcd(b,a%b);
}數(shù)因子void ff(int n,vector&res){for(int i=1;i<=n;++i){if(n%i==0)
res.push_back(i);
}
} 常用的頭文件及其內(nèi)部函數(shù)只說用的部分函數(shù),咋用這里木得
< map >map_name.count(key);//這個可以用來判斷某個數(shù)是否存在
map_name.find(key)!=map.end();//和上面一樣
map_name[key] = value;//插入某對鍵值對
map_name.erase(key);//刪除為key的鍵值對< set >set_name.count(x);//這個可以用來判斷x是否存在
set_name.find(x)!=map.end();//和上面一樣
set_name.insert(x);//向set容器內(nèi)插入數(shù)據(jù)x< pair >這沒啥,就相當(dāng)于下面的結(jié)構(gòu)體:
struct node{數(shù)據(jù)類型 first;
數(shù)據(jù)類型 second;
}< string >string_name.substr(startIndex,length)//從startIndex下標(biāo)開始截取length長度的字符串
string_name.erase(pos)//刪除pos下表的字符
string_name.insert(pos,n,ch)//在pos處插入n個ch字符
??int res = stoi(string_name);//字符串轉(zhuǎn)換成十進制
??string res = to_string(int val);//轉(zhuǎn)換成字符串里面可以是各種基本數(shù)據(jù)類型的變量
string_name.c_str();//string與const char*指針之間了轉(zhuǎn)換< vector >這個動態(tài)數(shù)組就不說了,沒啥需要特指的,還有stack和queue容器,這里不列舉。
< algorithm >stl中的這個好用的函數(shù)太多了
max(x,y)
min(x,y)
swap(x,y)
abs(x)//x是整型的
reverse(it1,it2)//這里的it1和it2是指迭代器
fill()//填充
sort()< cctype >isalpha()
isdigit()
islower()
isupper()還有什么toupper、tolower這樣的,想轉(zhuǎn)換我們直接ch ^= 32;用異或解決即可。
setw()//域?qū)?setfill()//域填充
setbase()//進制這里有倆好用的函數(shù),用于字符串匹配:
int sscanf(const char *str, const char *format, …)
int sprintf(char *str, const char *format, …)
sscanf是將str字符串轉(zhuǎn)換成對應(yīng)的數(shù)據(jù)的,是從左到右按字符串匹配得到轉(zhuǎn)換的操作;sprintf是將數(shù)據(jù)轉(zhuǎn)換成字符串,是從右到左匹配的一個轉(zhuǎn)換操作;
如果使用這個想用到string,那么可以使用string中的c_str()函數(shù),也可以對其進行操作了。
#include#include#includeusing namespace std;
int main(){char ch;
string s,s1;
getline(cin,s);
double f = 0.0;
char x[10];
sscanf(s.c_str(),"%lf",&f);
cout<< f<< endl;
sprintf(x,"%.2lf",f);
cout<< x<< endl;
return 0;
} 輸入:
66
輸出:
66
66.00
輸入:
89.356
輸出:
89.356
89.36
輸入:
3.23
輸出:
3.23
3.23
注意:里面的首個參數(shù)是char*指針,用string時可以通過c_str()函數(shù)使用sscanf,而用sprintf要用char類型數(shù)組。sscanf和sprintf成功的話會有返回值的,整型的,如果成功會返回1;
例子:

上面說的倆函數(shù)是不能用的,to_string可以轉(zhuǎn)換成string類型的,然后再調(diào)用c_str()也是可以達到那個itoa的效果的,所以不能用也沒關(guān)系。
cin有些測試點就會出問題了;你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
當(dāng)前文章:【PAT乙級】一百一十道真題刷后大匯總——C/C++-創(chuàng)新互聯(lián)
當(dāng)前URL:http://www.chinadenli.net/article42/deeeec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、響應(yīng)式網(wǎng)站、標(biāo)簽優(yōu)化、自適應(yīng)網(wǎng)站、App設(shè)計、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容