看板 C_and_CPP 關於我們 聯絡資訊
看完題目個人的想法是以下... 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