数字反转(升级版)(洛谷-P1553)
生活随笔
收集整理的這篇文章主要介紹了
数字反转(升级版)(洛谷-P1553)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
給定一個數,請將該數各個位上數字反轉得到一個新數。
這次與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:?
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++)//記錄小數、分數、百分數符號的位置 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)//輸出反轉整數{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//小數、分數、百分數和{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++)//輸出符號位前的數cout<<result[j];if(result[flag]=='.')//輸出小數{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]=='/')//輸出百分數{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]=='%')//輸出分數{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; }?
總結
以上是生活随笔為你收集整理的数字反转(升级版)(洛谷-P1553)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛C++语言:素数的判定
- 下一篇: 等差数列末项计算(信息学奥赛一本通-T1