題目描述:
給定乙個數,請將該數各個位上數字反轉得到乙個新數。
這次與noip2011普及組第一題不同的是:這個數可以是小數,分數,百分數,整數。整數反轉是將所有數字對調;小數反轉是把整數部分的數反轉,再將小數部分的數反轉,不交換整數部分與小數部分;分數反轉是把分母的數反轉,再把分子的數反轉,不交換分子與分母;百分數的分子一定是整數,百分數只改變量字部分。整數新數也應滿足整數的常見形式,即除非給定的原數為零,否則反轉後得到的新數的最高位數字不應為零;小數新數的末尾不為0(除非小數部分除了0沒有別的數,那麼只保留1個0);分數不約分,分子和分母都不是小數(約分滴童鞋抱歉了,不能過哦。輸入資料保證分母不為0),本次沒有負數。
輸入輸出格式:
輸入格式:
乙個數s
輸出格式:
乙個數,即s的反轉數
輸入輸出樣例
輸入樣例#1: 5087462
輸出樣例#1: 2647805
輸入樣例#2: 600.084
輸出樣例#2: 6.48
輸入樣例#3: 700/27
輸出樣例#3: 7/72
輸入樣例#4: 8670%
輸出樣例#4: 768%
說明所有資料:25%s是整數,不大於20位
25%s是小數,整數部分和小數部分均不大於10位
25%s是分數,分子和分母均不大於10位
25%s是百分數,分子不大於19位
(20個資料)
反思:感覺這道題難度不大,但是比較麻煩,為了看本人起來方便,本人分了幾個函式去寫,用函式type來判斷讀入的是小數、百分數、整數還是分數,用函式nao_print和anti_print分別表示直接輸出判零和反向輸出判零,然後在函式do_it中進行主要操作,本人比較習慣下劃線命名了,感覺也沒有什麼問題,主要的問題是沒有個人對程式進行檢查,而是寫好一部分直接上傳,交由題庫判斷,這個習慣得試著改改。
#include// 用於開啟c++的所有庫函式
using namespace std;
char c[10005],len,t; //c為讀入的陣列,len為陣列長度(後面有所變化),t用來儲存字串中可能出現的標點
int pos = 0,bot = 0; //pos用來記錄標點所在的位置,bot用來記錄輸出的尾端
char type() //用來判斷字串中符號的型別
for (int i=0;i0) len--; //正向表達,如果首端有0的話len減一表示刪去
if (len-bot == 0) //len-bot的值為0意味著這部分數值為零,直接輸出0即可
for (int i=len-1;i>=bot;i--)
printf("%c",c[i]);
}void anti_print() //「反向輸出」,逆向判斷是否有0
for (int i=len-1;i>=bot;i--)
printf("%c",c[i]);
}void do_it() //主要執行部分
int tot = len;
len = pos;
if (t == '/')
if (t == '.') }
int main ()
洛谷 P1553 數字反轉(公升級版)
題目描述 給定乙個數,請將該數各個位上數字反轉得到乙個新數。這次與noip2011普及組第一題不同的是 這個數可以是小數,分數,百分數,整數。整數反轉是將所有數字對調 小數反轉是把整數部分的數反轉,再將小數部分的數反轉,不交換整數部分與小數部分 分數反轉是把分母的數反轉,再把分子的數反轉,不交換分子...
洛谷 P1553 數字反轉(公升級版)
使用string中的reverse,find first not of函式 翻轉函式。把string型別的字串翻轉一次 常用的格式 reverse str.begin str.end 返回在字串中首次出現的不匹配str任何字元的首字元索引 當然這個函式有很多用法,這裡去除前導0的語句是 str st...
洛谷 P1553 數字反轉(公升級版)
給定乙個數,請將該數各個位上數字反轉得到乙個新數。這次與noip2011普及組第一題不同的是 這個數可以是小數,分數,百分數,整數。整數反轉是將所有數字對調 小數反轉是把整數部分的數反轉,再將小數部分的數反轉,不交換整數部分與小數部分 分數反轉是把分母的數反轉,再把分子的數反轉,不交換分子與分母 百...