- 論壇徽章:
- 0
|
本帖最后由 時(shí)間看來(lái) 于 2012-12-01 23:18 編輯
看到有討論用shell script寫(xiě)這個(gè),學(xué)習(xí)了哈。sed,gawk復(fù)制的用法還沒(méi)有搞懂~
嘗試了下用c寫(xiě),請(qǐng)多多指教!歡迎您貼出您的代碼,供我們菜鳥(niǎo)學(xué)習(xí)。- /*
- *輸入12,如何轉(zhuǎn)換成壹拾貳,輸入1020,轉(zhuǎn)成壹千零貳拾
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- void get4num(char *dest, char *src);
- void output4num(char *src);
- int output_unit(int left_bits);
- char *my_array[10] = {"零","壹","貳","叁","肆",\
- "伍","陸","柒","捌","玖"};
- char *my_unit[5] = {"拾","佰","仟","萬(wàn)","億"};
- int FLAG_FIRST;
- int
- main(int argc, char *argv[])
- {
- /*test my_array*/
- int i;
- for(i=0; i<10; i++){
- printf("%s\n", *(my_array+i));
- }
- char input_num[100];
- printf("input_num:\n");
- scanf("%s", input_num);
- printf("%s\n", input_num);
-
- int input_len = strlen(input_num);
- char nums_4[6];
- /*output first nums*/
- FLAG_FIRST = 1;
- int first_num = input_len % 4;
- if(first_num != 0){
- strncpy(nums_4, input_num, first_num);
- output4num(nums_4);
- output_unit(input_len);
- }
- /*output the left 4 nums*/
- FLAG_FIRST = 1;
- for(i=first_num; i<input_len; i+=4){
- get4num(nums_4, input_num+i);
- output4num(nums_4);
- output_unit(input_len-i);
- FLAG_FIRST = 0;
- }
- printf("\0");
- return 0;
- }
- /*
- *get 4 numbers
- */
- void
- get4num(char *dest, char *src)
- {
- int i = 4;
- strncpy(dest, src, i);
- }
- /*
- * output 4 numbers
- */
- void
- output4num(char *src)
- {
- int i, j;
- int num, nums[4];
- num = atoi(src);
- j = strlen(src);
- /*low number is at low place*/
- for(i=0; i<4; i++){
- nums[i] = (num % 10);
- num /= 10;
- }
- /*output first nums*/
- if(nums[j-1] == 0){
- if((j == 4) && (FLAG_FIRST == 0)){
- printf("%s", *(my_array+nums[j-1]));
- }
- }else{
- printf("%s", *(my_array+nums[j-1]));
- printf("%s", *(my_unit+j-2));
- }
- /*output number and unit*/
- for(i=j-2; i>=1; i--){
- if(nums[i] == 0){
- if(nums[i+1] != 0){
- printf("%s", *(my_array+nums[i]));
- }
- }else{
- printf("%s", *(my_array+nums[i]));
- printf("%s", *(my_unit+i-1));
- }
- }
- if(nums[0] != 0){
- printf("%s", *(my_array+nums[i]));
- }
- }
- /*
- * output the unit of 4 nums
- */
- int
- output_unit(int left_bits)
- {
- int m, n;
- m = (left_bits-1) / 4;
- switch(m){
- case 0:
- return 0;
- case 1:
- printf("%s", my_unit[3]);
- return 0;
- default:
- for(n=m; n>=2; n--){
- printf("%s", my_unit[4]);
- }
- }
- printf(",");
- }
復(fù)制代碼 input_num:
9283749817509843219827409812365908
9283749817509843219827409812365908
玖拾貳億億億億億億億,捌仟叁佰柒拾肆億億億億億億,玖仟捌佰壹拾柒億億億億億,伍仟零玖拾捌億億億億,肆仟叁佰貳拾壹億億億,玖仟捌佰貳拾柒億億,肆仟零玖拾捌億,壹仟貳佰叁拾陸萬(wàn)伍仟玖佰零捌
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2012.12.1
非常感謝樓下的回復(fù),陪我寫(xiě)玩具程序。
發(fā)現(xiàn)我上面的程序每4位輸出的單位上萬(wàn)億后都是錯(cuò)的。把重寫(xiě)了int output_unit(int left_bits),還有修改了穿過(guò)來(lái)的left_bits是4的整數(shù)倍。
根據(jù)人的讀數(shù)習(xí)慣(以4個(gè)位數(shù)為一個(gè)單元),第一感覺(jué)也就這么寫(xiě)了。相信還有跟好的方法。
2樓的就是根據(jù)每位數(shù)來(lái)判斷單位,不過(guò)我編譯運(yùn)行你的程序后,輸出是亂碼,這個(gè)我沒(méi)有搞明白。我可是很想抓你小辮子哦!哇咔咔~對(duì)你再次表示感謝。- /*
- *輸入12,如何轉(zhuǎn)換成壹拾貳,輸入1020,轉(zhuǎn)成壹千零貳拾
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- void get4num(char *dest, char *src);
- void output4num(char *src);
- int output_unit(int left_bits);
- char *my_array[10] = {"零","壹","貳","叁","肆",\
- "伍","陸","柒","捌","玖"};
- char *my_unit[5] = {"拾","佰","仟","萬(wàn)","億"};
- int FLAG_FIRST;
- int
- main(int argc, char *argv[])
- {
- /*test my_array*/
- int i;
- for(i=0; i<10; i++){
- printf("%s\n", *(my_array+i));
- }
- char input_num[100];
- printf("input_num:\n");
- scanf("%s", input_num);
- printf("%s\n", input_num);
-
- int input_len = strlen(input_num);
- char nums_4[6];
- /*output first nums*/
- FLAG_FIRST = 1;
- int first_num = input_len % 4;
- if(first_num != 0){
- strncpy(nums_4, input_num, first_num);
- output4num(nums_4);
- output_unit(input_len - first_num);
- }
- /*output the left 4 nums*/
- FLAG_FIRST = 1;
- for(i=first_num; i<input_len; i+=4){
- get4num(nums_4, input_num+i);
- output4num(nums_4);
- output_unit(input_len - i - 4);
- FLAG_FIRST = 0;
- }
- printf("\0\0");
- return 0;
- }
- /*
- *get 4 numbers
- */
- void
- get4num(char *dest, char *src)
- {
- int i = 4;
- strncpy(dest, src, i);
- }
- /*
- * output 4 numbers
- */
- void
- output4num(char *src)
- {
- int i, j;
- int num, nums[4];
- num = atoi(src);
- j = strlen(src);
- /*low number is at low place*/
- for(i=0; i<4; i++){
- nums[i] = (num % 10);
- num /= 10;
- }
- /*output first nums*/
- if(nums[j-1] == 0){
- if((j == 4) && (FLAG_FIRST == 0)){
- printf("%s", *(my_array+nums[j-1]));
- }
- }else{
- printf("%s", *(my_array+nums[j-1]));
- printf("%s", *(my_unit+j-2));
- }
- /*output number and unit*/
- for(i=j-2; i>=1; i--){
- if(nums[i] == 0){
- if(nums[i+1] != 0){
- printf("%s", *(my_array+nums[i]));
- }
- }else{
- printf("%s", *(my_array+nums[i]));
- printf("%s", *(my_unit+i-1));
- }
- }
- if(nums[0] != 0){
- printf("%s", *(my_array+nums[i]));
- }
- }
- /*
- * output the unit of 4 nums
- */
- int
- output_unit(int left_bits)
- {
- int m, n;
- /*the last one*/
- if(left_bits < 4){
- return 0;
- } else{
- m = left_bits % 8;
- switch(m){
- case 4:
- printf("%s", my_unit[3]);
- break;
- case 0:
- n = left_bits / 8;
- for(m=0; m<n; m++){
- printf("%s", my_unit[4]);
- }
- }
- }
- printf(",");
- return 0;
- }
復(fù)制代碼 input_num:
123456789012345678901234567890
123456789012345678901234567890
壹拾貳萬(wàn),叁仟肆佰伍拾陸億億億,柒仟捌佰玖拾萬(wàn),壹仟貳佰叁拾肆億億,伍仟陸佰柒拾捌萬(wàn),玖仟零壹拾貳億,叁仟肆佰伍拾陸萬(wàn),柒仟捌佰玖拾
|
|