P1553 數字反轉(公升級版)

2021-09-24 04:47:30 字數 3479 閱讀 4535

題目描述

給定乙個數,請將該數各個位上數字反轉得到乙個新數。

這次與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個資料)

首先整數的話,要保證從末尾不為零開始輸出。

其次小數的話,小數點前的,需要從小數點前不為零開始倒序輸出,小數點後的,需要從末尾不為零的輸到小數點後不為零的區間。若輸入的形如00.000,需要輸出0.0,再進行特判;,,,。。。

除法:和小數處理基本一致;

取餘:簡單一點,只需要處理%前的就行;

當然都得特判一下輸入的是不是零,進行特殊處理。。。

#include

#include

#include

#include

#include

#include

using namespace std;

typedef

long

long ll;

#define maxn 10005

#define mod 7654321

void

shuzi

(string a)

}for

(int i=pos;i>=

0;i--

) cout<}void

dian

(string a,

int b)

//605

else

if(a[i]

!='0')}

if(k!=-1

&&num==1)

}if(num==-1

) cout<<0;

cout<<

".";

//.9860

k=-1

;int j=a.

length()

-1; num=-1

;int pos=a.

length()

-1;for

(int i=a.

length()

-1;i>b;i--)}

//cout(int i=b+

1;i<=pos;i++

)else

if(a[i]

!='0')}

if(k!=-1

&&num==1)

}if(num==-1

) cout<<0;

}void

chufa

(string a,

int b)

//700/27

else

if(a[i]

!='0')}

if(k!=-1

&&num==1)

}if(num==-1

) cout<<0;

cout<<

"/";

k=-1

;int j=a.

length()

-1; num=-1

;int pos=a.

length()

-1;for

(int i=a.

length()

-1;i>b;i--)}

for(

int i=b+

1;ilength()

;i++

)else

if(a[i]

!='0')}

if(num==0)

//cout(k!=-1

&&num==1)

}if(num==-1

) cout<<0;

}void

quyu

(string a,

int b)

//8670%

else

if(a[i]

!='0')}

if(k!=-1

&&num==1)

}if(num==-1

) cout<<

"%";

}int

main()

;//. / %

int b,c,d;

cin>>a;

for(

int i=

0;ilength()

;i++)if

(fuhao[1]

==0&&fuhao[2]

==0&&fuhao[3]

==0)shuzi

(a);

if(fuhao[1]

)dian

(a,b);if

(fuhao[2]

)chufa

(a,c);if

(fuhao[3]

)quyu

(a,d)

;return0;

}

P1553 數字反轉(公升級版)

給定乙個數,請將該數各個位上數字反轉得到乙個新數。這次與noip2011普及組第一題不同的是 這個數可以是小數,分數,百分數,整數。整數反轉是將所有數字對調 小數反轉是把整數部分的數反轉,再將小數部分的數反轉,不交換整數部分與小數部分 分數反轉是把分母的數反轉,再把分子的數反轉,不交換分子與分母 百...

P1553 數字反轉(公升級版)

題目鏈結 題目描述 給定乙個數,請將該數各個位上數字反轉得到乙個新數。這次與noip2011普及組第一題不同的是 這個數可以是小數,分數,百分數,整數。整數反轉是將所有數字對調 小數反轉是把整數部分的數反轉,再將小數部分的數反轉,不交換整數部分與小數部分 分數反轉是把分母的數反轉,再把分子的數反轉,...

P1553 數字反轉(公升級版)

題目描述 給定乙個數,請將該數各個位上數字反轉得到乙個新數。這次與noip2011普及組第一題不同的是 這個數可以是小數,分數,百分數,整數。整數反轉是將所有數字對調 小數反轉是把整數部分的數反轉,再將小數部分的數反轉,不交換整數部分與小數部分 分數反轉是把分母的數反轉,再把分子的數反轉,不交換分子...