[C語言] 中文大寫轉換器

這是Zerojudge上的一個題目,雖然放在基礎題庫的前面,但真的超難,我可是想了三天才得出解法....

中文對於省略數字的規則頗複雜,以至於在判定輸出內容上會有困難(抹臉

例如「10050000」=一千零五萬,省略了一堆零和單位....

跟之前一樣附上的執行檔載點:https://atifans.net/download/code/chinese_number_converter.rar

//存取所需函式庫
#include <stdio.h>

//主程式
int main(){

	//定義變數
	char* table[] = {"零","壹","貳","參","肆","伍","陸","柒","捌","玖"};
	//用陣列陣列儲存大型字元(BIG5)
	char* tablu[] = {"","拾","佰","仟","萬","拾","佰","仟","億","拾"};
	char input[10];
	int a,b,c,d,e,digit;

	printf("////中文大寫轉換器 by ATi////\n\n
		注意:「輸入的阿拉伯數字上限十位數,離開程式請按Ctrl+C」\n\n");

	//主迴圈
	while(1){
		printf("阿拉伯數字:");
		scanf("%s",input);
		printf("中文大寫:");

		//檢查位數長度
		for(a=0; a<10; a++){
			if((int)input[a]==0){
				digit = a;
				break;
			}else if(a==9 && (int)input[a]!=0){
				digit = 10;
				break;
			}
		}

		//初始化紀錄變數
		d = 0;
		e = 0;

		//判定輸出內容
		for(b=digit;b>0;b--){
			c = ((int)input[(digit-b)]) - 48; //將字元轉換成ASCII整數才能運算

			if(c!=0){
				if(d!=0){
					printf("%s",table[0]);
					d = 0;
				}
				printf("%s%s",table[c],tablu[(b-1)]);
				e = 1;
			}else{
				d = 1;
				if(e!=0 && b==9){
					printf("%s",tablu[(b-1)]);
					e = 0;
					d = 0;
				}else if(e!=0 && b==5){
					printf("%s",tablu[(b-1)]);
					e = 0;
					d = 0;
				}
			}

		}
		printf("\n\n");
	}
	return 0;
}

留言

    • @NiwaSho Lin
      題號:a008
      頭像的話,你到Gravatar去用信箱綁圖片就可以了
      Gravatar在很多地方都用的到,連EA的Battlelog也不例外(汗

  1. 感謝您。

粗體斜體刪除線連結引用圖片程式碼

注意:您的電子信箱將不會被公開,且網站連結不會被搜尋引擎採計