看完題目個人的想法是以下...
String sta[]; // 用來儲存輸出
int top //配合sta仿stack結構
bool dirty;
void main(){
int n; //input number
sta = new;
top = 0;
String[] word = {"","萬","億","兆","金"...};
int word_cnt = -1;
int remain;
while(n > 0){
word_cnt++;
sta[top++] = word[word_cnt];
remain = n%10000;
n = n / 10000;
convert_four(remain);
}
for(int i=top;i>=0;i--)
cout<<sta[i];
...
}
void convert_four(int n){
String[] word = {"", "拾", "佰", "仟"};
int word_cnt = -1;
int remain;
dirty = f; //初始化成 if(r==0)不補零
while(n > 0){
word_cnt++; // start increaing from 0
sta[top++] = word[word_cnt]; //預設都放入word
remain = n % 10;
n = n/10;
if(remain==0){
sta[--top] = ""; //沒有餘數word拿出
if(dirty){ //跳過需補零 dirty 防止連補兩次以上
sta[top++] = "零";
dirty = f;
}
break; //跳出迴圈 不做convert();
}
convert(remain); //將餘數轉成一到九
}
}
void convert(int r){
dirty = t; //補零開關打開
switch(r) //那個浩大的switch
case ?:
sta[top++] = "數字一到九其中一個"; //九個case去衝
...
}
----------------------------------
囧 不自覺得都打了 精神是stack
先以四個位數為單位寫成一個四位數轉換函數
因為中文讀法規則 習慣以10^4為一個大單位...
十百千都重複 故寫成 convert_four(int)
不斷的取remain 並且若不是零就call convert(int)
關於放零的動作用了一個bool開關 可能有點複雜
...
然後整個寫完之後 才發現網站是高中生程式 XD
假如原PO 能google stack然後看懂這篇code
相信大學上資結會快速上手 XD! 關鍵字 >>> "先進後出"
至於你原本的code 我大概懂你的概念是先一對一轉換
再比對零的分布情形 做輸出零的調整
個人感覺分布組合太多種 所以就不使用一堆if的寫法了...
也許有點小題大做了吧 ~ ^^! 還請板上其他高手指正一下~
--
◢/ ◢/ ╮ ╮ ╭┬ ╭─┐┬╮
█ █◤ ◢█▍◢██◣ ─┼─┬┼─ ╰┼──┼╮ │ ╯╮│││
█/█◤ █▉ █▉██ ╮│ ││ ╭─┼─╮ │ └┴┘└┼
██// █▉ ◥███ ├┼╮├┼╮ │ │ │ │ ├─┼─╮
█ █// █▉ ◥██◤ ││ │││ ┴─┼─┴ │ ╭╯├─╮
█◤ █◤ ╯│─╯│╰ ○╰─╯╰─╯ ○ ┴ ╯ ┴ ╰
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.85.95.59