【題解】洛谷1553 數字反轉(…
阿新 • • 發佈:2019-02-08
題目描述
給定一個數,請將該數各個位上數字反轉得到一個新數。這次與NOIp2011普及組第一題不同的是:這個數可以是小數,分數,百分數,整數。整數反轉是將所有數位對調;小數反轉是把整數部分的數反轉,再將小數部分的數反轉,不交換整數部分與小數部分;分數反轉是把分母的數反轉,再把分子的數反轉,不交換分子與分母;百分數的分子一定是整數,百分數之改變數字部分。整數新數也應滿足整數的常見形式,即除非給定的原數為零,否則反轉後得到的新數的最高位數字不應為零;小數新數的末尾不為0(除非小數部分除了0沒有別的數,那麼只保留1個0);分數不約分,分子和分母都不是小數(約分滴童鞋抱歉了,不能過哦。輸入資料保證分母不為0),本次沒有負數。
輸入輸出格式
輸入格式:一個數s
輸出格式:一個數,即s的反轉數
輸入輸出樣例
輸入樣例#1:① 5087462 ② 600.084 ③ 700/27 ④ 8670%輸出樣例#1:
① 2647805 ② 6.48 ③ 7/72 ④ 768%
說明
所有資料:25%s是整數,不大於20位25%s是小數,整數部分和小數部分均不大於10位
25%s是分數,分子和分母均不大於10位
25%s是百分數,分子不大於19位
(20個數據) 解析 這道題費了不少功夫,反映出我對字串的嚴重不熟悉和題量太少,不過做完收穫很大。 首先寫出一個反轉子程式用於呼叫,注意一旦清空的話也要保留一個‘0’; 然後就是主程式了,用幾重判斷來決定反轉模式,在這裡我學到了一個“string::npos"的常量,我所理解的意義為所查詢的字元位置不存在,值為-1,如 (p=s.find('.'))!=string::npos) 就是將字串s中‘.'的位置賦值給p,然後判斷是否有‘.',若沒有則該表示式值為false. 還學到了幾個string函式 1.s.empty()意為判斷s是否為空,若空則值為true; 2.s.replace(int a,int b,string m