数字反转(升级版)(洛谷-P1553)
題目描述
給定一個數(shù),請將該數(shù)各個位上數(shù)字反轉(zhuǎn)得到一個新數(shù)。
這次與NOIp2011普及組第一題不同的是:這個數(shù)可以是小數(shù),分數(shù),百分數(shù),整數(shù)。整數(shù)反轉(zhuǎn)是將所有數(shù)位對調(diào);小數(shù)反轉(zhuǎn)是把整數(shù)部分的數(shù)反轉(zhuǎn),再將小數(shù)部分的數(shù)反轉(zhuǎn),不交換整數(shù)部分與小數(shù)部分;分數(shù)反轉(zhuǎn)是把分母的數(shù)反轉(zhuǎn),再把分子的數(shù)反轉(zhuǎn),不交換分子與分母;百分數(shù)的分子一定是整數(shù),百分數(shù)只改變數(shù)字部分。整數(shù)新數(shù)也應滿足整數(shù)的常見形式,即除非給定的原數(shù)為零,否則反轉(zhuǎn)后得到的新數(shù)的最高位數(shù)字不應為零;小數(shù)新數(shù)的末尾不為0(除非小數(shù)部分除了0沒有別的數(shù),那么只保留1個0);分數(shù)不約分,分子和分母都不是小數(shù)(約分滴童鞋抱歉了,不能過哦。輸入數(shù)據(jù)保證分母不為0),本次沒有負數(shù)。
輸入輸出格式
輸入格式:
一個數(shù)s
輸出格式:
一個數(shù),即s的反轉(zhuǎn)數(shù)
輸入輸出樣例
輸入樣例#1:?
5087462
輸出樣例#1:?
2647805
輸入樣例#2:
600.084
輸出樣例#2:?
6.48
輸入樣例#3:
700/27
輸出樣例#3:?
7/72
輸入樣例#4:
8670%
輸出樣例#4:?
798%
源代碼
#include<iostream> #include<cstring> using namespace std; int main() { char number[25]={'\0'},result[25]={'\0'};int i,j,k;int len,flag; cin>>number;len=strlen(number); flag=len;for(i=0;i<len;i++)//記錄小數(shù)、分數(shù)、百分數(shù)符號的位置 if(number[i]=='.'||number[i]=='/'||number[i]=='%') {flag=i; for(j=len-1;number[j]=='0'&&number[j-1]!='.'&&number[j-1]!='/'&&number[j]!='%';j--)len--;}for(i=0;i<flag;i++)//符號前result[i]=number[flag-i-1]; result[flag]=number[flag]; for(i=flag+1;i<len;i++)//符號后result[i]=number[len-i+flag]; for(i=0;result[i]!='\0';i++){if(flag==len)//輸出反轉(zhuǎn)整數(shù){if(len==1) cout<<result[i]<<endl;else{for(j=0;result[j]=='0';j++)//排除首位是0 if(result[j]!='0') break; for(;result[j]!='\0';j++)//輸出cout<<result[j];cout<<endl;break;} }else//小數(shù)、分數(shù)、百分數(shù)和{for(j=0;result[j]=='0'&&j<flag&&result[j+1]!='/'&&result[j+1]!='%'&&result[j+1]!='.';j++)//忽略符號位if(result[j]!='0')//排除首位是0 break; for(;j<flag;j++)//輸出符號位前的數(shù)cout<<result[j];if(result[flag]=='.')//輸出小數(shù){if((strlen(result)-flag)!=2)for(k=strlen(result);result[k-1]=='0';k--)result[k-1]='\0';for(;result[j]=='0'&&j>flag;j++)//排除首位是0if(result[j]!='0')break;for(;result[j]!='\0';j++)//輸出符號位后cout<<result[j];cout<<endl;break;}if(result[flag]=='/')//輸出百分數(shù){for(j++;result[j]=='0'&&j>flag;j++)//排除首位是0的情況if(result[j]!='0')break;cout<<result[flag];//輸出符號for(;result[j]!='\0';j++)//輸出符號位后cout<<result[j];cout<<endl;break;}if(result[flag]=='%')//輸出分數(shù){for(j++;result[j]=='0'&&j>flag;j++)//排除首位是0的情況if(result[j]!='0')break;cout<<result[flag];//輸出符號for(;result[j]!='\0';j++)//輸出符號位后cout<<result[j];cout<<endl;break;}}}return 0; }?
總結(jié)
以上是生活随笔為你收集整理的数字反转(升级版)(洛谷-P1553)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛C++语言:素数的判定
- 下一篇: 信息学奥赛C++语言:输出学生序号与成绩