7-1 幣值轉換 (20 分)
輸入一個整數(位數不超過9位)表明一我的民幣值(單位爲元),請轉換成財務要求的大寫中文格式。如23108元,轉換後變成「貳萬叄仟壹百零捌」元。爲了簡化輸出,用小寫英文字母a-j順序表明大寫數字0-9,用S、B、Q、W、Y分別表明拾、百、仟、萬、億。因而23108元應被轉換輸出爲「cWdQbBai」元。
輸入格式:
輸入在一行中給出一個不超過9位的非負整數。
輸出格式:
在一行中輸出轉換後的結果。注意「零」的用法必須符合中文習慣。
輸入樣例1:
813227345
輸出樣例1:
iYbQdBcScWhQdBeSf
輸入樣例2:
6900
輸出樣例2:
gQjB數組
(1)實驗代碼函數
#include<stdio.h> #include<string.h> //字符串操做函數,如求字符串長度 int main() { int lenth,l; char str[10]; //定義字符串數組 gets(str); lenth=strlen(str); //求長度 while(lenth>9) { lenth--; } l=lenth; //用l來保存當前位數,即千位,百位。 int t=1; //定義t用於判斷萬位是否輸出單位(W) if(str[1]=='0'&&str[2]=='0'&&str[3]=='0'&&str[4]=='0') { t=0; //若萬位,十萬位,百萬位,千萬位都爲零,則不須要輸出單位萬(W) } else { t=1; } for(int i=0;i<lenth;i++,l--) { char c=str[i]; switch(c) { case'0':c='a';break; case'1':c='b';break; case'2':c='c';break; case'3':c='d';break; case'4':c='e';break; case'5':c='f';break; case'6':c='g';break; case'7':c='h';break; case'8':c='i';break; case'9':c='j';break; default:break; } if(lenth==1&&str[0]=='0') { printf("a"); return 0; //當只輸入一個數時,且該數爲0,即數組長度只有1位,且str[0]=='0'。 } if(c=='a') { //0特殊,爲0(a)的字符單獨考慮 if(l==5&&t) { printf("W");//當0在萬位時,直接輸出單位萬,不須要輸出零(a) } else { //當0不在萬位時 for(i++,l--;i<lenth;i++,l--) { //看0的下幾位是否爲0 if(str[i]=='0') { //數組中的字符還是數字,因此要用數字’0‘判斷 if(l==5&&t) { printf("W"); //下幾位如有萬位爲0的,直接輸出單位萬(w) } } //若爲0的數中沒有萬位的,直接跳過,判斷下一位,不須要輸出任何東西 else { //下面幾位數中,0後面有不爲0的數 printf("a"); l++;i--; /*將l和i的值恢復到上一位爲0的數所表明的值,由於break後,上面的for循環又要把l和i的 恢復到先前那個不爲0的值所表明的值 */ break; } } } } else { //字符不爲0(a)。 printf("%c",c); //輸出字符 switch(l) { //位數 case 9:printf("Y");break; case 8:case 4:printf("Q");break; case 7:case 3:printf("B");break; case 6:case 2:printf("S");break; case 5:printf("W");break; default:break; } } } return 0; }
(2)設計思路
設計
第一步:運用字符串操做函數
第二步:定義變量(整型與字符型)
第三步:運用while語句判斷出位數,再用switch語句選擇每一個數字對應的字符(詳細講解對應(1)中代碼)
第四步:打印結果調試
(3)本題調試過程碰到問題及解決辦法
問題1:不會用字符串操做函數
解決方法:找書上有關字符串操做函數的內容,而後仔細看,最後再查資料,看其餘同窗的博客code
問題2:零的狀況考慮不全
解決方法:本身慢慢思索,而後參看其餘同窗的博客視頻
問題3:不懂輸出億位, 萬位,千位,百位,十位
解決方法:查資料,看了幾個大佬的博客blog
問題4:不知道gets(str)的意思,而且不太懂數組的運用
解決方法:搜視頻看,看書,查資料字符串
(4)運行結果截圖
get