PTA 幣值轉換 20分

2021-10-02 12:13:20 字數 1905 閱讀 7863

輸入乙個整數(位數不超過9位)代表乙個人民幣值(單位為元),請轉換成財務要求的大寫中文格式。如23108元,轉換後變成「貳萬叄仟壹百零捌」元。為了簡化輸出,用小寫英文本母a-j順序代表大寫數字0-9,用s、b、q、w、y分別代表拾、百、仟、萬、億。於是23108元應被轉換輸出為「cwdqbbai」元。

輸入格式:

輸入在一行中給出乙個不超過9位的非負整數。

輸出格式:

在一行中輸出轉換後的結果。注意「零」的用法必須符合中文習慣。

輸入樣例1:

813227345

輸出樣例1:

iybqdbcscwhqdbesf

輸入樣例2:

6900

輸出樣例2:

g**b

首先按照每4位分一級,分為億、萬等,用數字輸入直接餘10000就能遞迴劃分了。然後對每一部分處理即可。

pos是判斷當前在第幾部分,prev是判斷前面是否有非零,prev0判斷前面有非零後邊有零。 因為是對數字處理,所以 假如100001%10000,分成兩部分是10 和 1 ,而不是 10和0001,所以需要處理。

最後0要特判。

**如下:

//

#include

#define fi first

#define se second

#define sz(x) ((int)x.size())

#define pb push_back

#define rep(i,a,b) for(int i=(a);i<=(b);++i)

#define per(i,a,b) for(int i=(a);i>=(b);--i)

#define mem(a,b) memset(a,b,sizeof a)

using

namespace std;

typedef vector<

int> vi;

typedef pair<

int,

int> pii;

typedef

long

long ll;

template

<

class

t>

inline

void

read

(t &x)

while

(isdigit

(c))

if(f) x=

-x;}

const

int maxn=

1e5+5;

char ut=

,ut=

;ll mx=-1

;void

solve

(ll n,ll pos)

mx=max(mx,pos)

;char s[5]

;sprintf

(s,"%lld"

,n%10000);

// itoa(n%10000,s,10);

ll len=

strlen

(s),prev=

0,prev0=

0,pr=1;

rep(i,

0,len-1)

if(prev0)

putchar

(s[i]

-'0'

+'a');

if(4-len+i>=3)

else

putchar

(ut[

4-len+i]);

}else}}

if(prev)

}int

main()

5 23 幣值轉換 20分

5 23 幣值轉換 20分 輸入乙個整數 位數不超過9位 代表乙個人民幣值 單位為元 請轉換成財務要求的大寫中文格式。如23108元,轉換後變成 貳萬叄仟壹百零捌 元。為了簡化輸出,用小寫英文本母a j順序代表大寫數字0 9,用s b q w y分別代表拾 百 仟 萬 億。於是23108元應被轉換輸...

5 23 幣值轉換 20分

5 23 幣值轉換 20分 輸入乙個整數 位數不超過9位 代表乙個人民幣值 單位為元 請轉換成財務要求的大寫中文格式。如23108元,轉換後變成 貳萬叄仟壹百零捌 元。為了簡化輸出,用小寫英文本母a j順序代表大寫數字0 9,用s b q w y分別代表拾 百 仟 萬 億。於是23108元應被轉換輸...

7 23 幣值轉換(20 分)

7 23 幣值轉換 20 分 輸入乙個整數 位數不超過9位 代表乙個人民幣值 單位為元 請轉換成財務要求的大寫中文格式。如23108元,轉換後變成 貳萬叄仟壹百零捌 元。為了簡化輸出,用小寫英文本母a j順序代表大寫數字0 9,用s b q w y分別代表拾 百 仟 萬 億。於是23108元應被轉換...