HUST - 1016 幼儿园小朋友们的难题(水题)
幼兒園的小朋友們一直在研究一個問題——?如何在一個長長的句子中找到最大的那個非負整數(不存在負數)。你很不幸的被他們拖住了,又很不幸的被他們叫去執行這個任務,你非常得不爽!?因為你覺得這么簡單的問題簡直侮辱了你的智商,所以你決定寫一個程序來代勞。
輸入
輸入有多組數據。每組輸入一個句子(一定包含數字字符,可能包含空格),長度小于256,占一行
輸出
輸出對應有多行,每行輸出所找出的最大的那個非負整數
樣例輸入?
&&12345aBsdDkjie64skjd5lk 3*2&&0%%%00B58CD000000b a000b0000000c000樣例輸出?
12345 58 0題目大意:給出許多字符串,問每個字符串中出現的最大的非負整數是多少
題目分析:本來是在刷水題湊出題數的,結果碰到了這個題,涉及到了一點知識盲區,加上一開始真的不知道該怎么實現比較合適,做出這個題后還算是有點小收獲的,就寫個博客記錄一下吧(也可能是我太水了。。)
首先需要了解的前置知識是getline函數的返回值,和gets函數相似,當遇到EOF時返回一個輸入無效的值,即能跳出while循環,遇到回車時會進入循環,因為string類若想讀取一整行只能用getline,之前還沒遇到過相似的題目,所以算是補充了一下知識點吧
再者就是如何比較字符串中出現數字的大小呢,一開始我是想想寫個函數,將其轉換為數字然后比較的,但想了一下,發現給出的字符串長達256,連續的數字稍微一長,連longlong都爆掉了,所以肯定是不可行的,去網上看了題解后才知道,原來我們可以直接比較連續數字的長度,長度較長的肯定要比長度較短的要大,畢竟數位擺在那里嘛,若長度相等的話,也可以直接用string類的比較大小來判斷,因為string類對于字符的比較是按照字典序排序的,從前往后比較,也正好滿足了這個題目的要求,所以我們可以直接用string類儲存答案,記得初始化mmax為“0”,并且當遇到非0的數字時再開始記錄,這樣可以避免出現前導0的情況,以上應該就這么多了,簡單實現一下就好了
代碼:
#include<iostream> #include<cstdlib> #include<string> #include<cstring> #include<cstdio> #include<algorithm> #include<climits> #include<cmath> #include<cctype> #include<stack> #include<queue> #include<list> #include<vector> #include<set> #include<map> #include<sstream> #include<deque> #include<unordered_map> #define Pi acos(-1.0) using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e4+100;int main() { // freopen("input.txt","r",stdin);string s;while(getline(cin,s)){string mmax="0";for(int i=0;i<s.size();i++){if(isdigit(s[i])&&s[i]!='0'){string temp;while(isdigit(s[i])){temp+=s[i++];}if(temp.size()>mmax.size()||(temp.size()==mmax.size()&&temp>mmax))mmax=temp;}}cout<<mmax<<endl;}return 0; }總結
以上是生活随笔為你收集整理的HUST - 1016 幼儿园小朋友们的难题(水题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PAT (Basic Level) 10
- 下一篇: PAT (Basic Level) 10