輸入乙個整數(位數不超過9位)代表乙個人民幣值(單位為元),請轉換成財務要求的大寫中文格式。如23108元,轉換後變成「貳萬叄仟壹百零捌」元。為了簡化輸出,用小寫英文本母a-j順序代表大寫數字0-9,用s、b、q、w、y分別代表拾、百、仟、萬、億。於是23108元應被轉換輸出為「cwdqbbai」元。
輸入格式:
輸入在一行中給出乙個不超過9位的非負整數。
輸出格式:
在一行中輸出轉換後的結果。注意「零」的用法必須符合中文習慣。
輸入樣例1:
813227345
輸出樣例1:
iybqdbcscwhqdbesf
輸入樣例2:
6900
輸出樣例2:
g**b
位數 2 3 4 5 6 7 8 9
單位 十位 百位 千位 萬位 十 百 千 億
5~8位數在(十百千)的後面加了萬 這個單位,
此外, 需注意這些規則:
int temp = n;
while
(temp)
⑤如何判斷0是否連續出現?
⑥如何使得中間的連續0唯讀一次 0?
if (z_c == 0) 才輸出,保證輸出的前提是上一次訪問的位的值不為0
本人的修改部分
(3)由於pow()函式引數和返回值為浮點型,執行時發現有精度錯誤,比如pow(10,w),w=2 時返回99, 故採用四捨五入接收其返回的資料
j =
(int)
(pow(10
, w -1)
+0.5
);
(4)將對非0一位數的判斷提前,將對n為0值的判斷放在在n值更新後.
經本人修改後的**
#include
#include
int main()
;// 位數 2 3 4 5 6 7 8 9
// 單位 十位 百位 千位 萬位 十 百 千 億
char *st[8]
=;// 數字的位數
int w =0;
//10的整數次方
int j=0;
int temp = n;
while
(temp)
// pow 損失精度,四捨五入處理
j =(int)
(pow(10
, w -1)
+0.5);
//輸入的是個位數 0
if(n ==0)
// 對於 非零的情況
// 當前讀到的數字位
int h=0;
// 記錄0是否連續
int zerocontinue =0;
while
(n) h = n / j;
//當前位不為0
if(h)
else
//存在連續為0且連續0的中間不包含萬位
else}}
//去掉當前位的剩餘位
n = n % j;
if(n ==0)
j /=10;
w--;}
return0;
}
參考的**
#include
#include
int main()
;// char *st[8]=;
char *st[8]
=;int w =0;
int j;
int temp = n;
while
(temp)
j =pow(
10, w -1)
; int h;
int z_c =0;
// 記錄0是否連續
if(n ==0)
while
(n)else
else}}
n = n % j;
j /=10;
w--;if
(j ==1)
printf
("%s"
, sv[n]);
break;}
}return0;
}
(1)pow()函式的浮點數精度問題的原因和解決
(2)獲取數值的位數,獲取每一位的數值
(3)對於連續0 的判斷
PTA基礎程式設計題目 7 23 幣值轉換 C語言
pta基礎程式設計題目集 7 23 幣值轉換 20分 輸入乙個整數 位數不超過9位 代表乙個人民幣值 單位為元 請轉換成財務要求的大寫中文格式。如23108元,轉換後變成 貳萬叄仟壹百零捌 元。為了簡化輸出,用小寫英文本母a j順序代表大寫數字0 9,用s b q w y分別代表拾 百 仟 萬 億。...
pta 基礎程式設計題 7 23幣值轉換
輸入乙個整數 位數不超過9位 代表乙個人民幣值 單位為元 請轉換成財務要求的大寫中文格式。如23108元,轉換後變成 貳萬叄仟壹百零捌 元。為了簡化輸出,用小寫英文本母a j順序代表大寫數字0 9,用s b q w y分別代表拾 百 仟 萬 億。於是23108元應被轉換輸出為 cwdqbbai 元。...
PAT基礎級 7 23 幣值轉換
需要注意的幾個點 末尾的0不讀 中間有多個0時,唯讀乙個0 如果數字大於萬,萬位一定要讀 我感覺我的 存在一點問題,但是竟然ak了 神奇 去查了查,網上有的說100000001的大寫是一億萬零一!就是我的 結果,也是我覺得有問題的地方 是的,你沒看錯!不是一億零一,也不是一億零零一 但也有的說一億零...