輸入乙個整數(位數不超過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元應被轉換...