#4119: 自己測試時與解題有出入


ChengFuLin (TofuLin)


與正確輸出不相符(line:1)
您的答案為: 壹萬貳仟參佰肆拾伍萬貳仟參佰 ...略
正確答案為: 壹萬貳仟參佰肆拾伍

我自己有試過

若輸入多筆資料

輸出也沒問題.也有換行

可以請各位幫我看一下嗎?

 

 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAX_TEXT 20 

struct chinese_num{
 char num[3];

};

struct chinese_num Stack[MAX_TEXT]; 
int Top = -1; 


void Push(char Digit);
void PutTen(int difference);
int CheckContinueZero(char* Str, int Now, int StrLen);
void ConvertText(char* Str, int StrLen);

 

int main(void){
 char** Text;
 int i; 
 int j; 
 int Text_Len = 0; 
 int k;

 Text = (char**) malloc(sizeof(char *));

 Text[0] = (char*) malloc(sizeof(char **));

 for(i = 1; gets(Text[i-1]) != NULL; ++i){
  Text = (char **) realloc(Text, sizeof(char *) * (i + 1));

  Text[i] = (char *) malloc(sizeof(char **));
 
 } 


 for(j = 0; j < (i -1); ++j, Top = -1){
  Text_Len = strlen(Text[j]);

  ConvertText(Text[j], Text_Len);

  for(k = 0; k <= Top; ++k){

   printf("%s", Stack[k].num);

  }

  printf("\n");
 
 }

 return 0;
 
}


void Push(char Digit){
 switch(Digit){
  case '1': strcpy(Stack[++Top].num, "壹");
     break;

  case '2': strcpy(Stack[++Top].num, "貳");
     break;

  case '3': strcpy(Stack[++Top].num, "參");
     break;

  case '4': strcpy(Stack[++Top].num, "肆");
     break;

  case '5': strcpy(Stack[++Top].num, "伍");
     break;

  case '6': strcpy(Stack[++Top].num, "陸");
     break;

  case '7': strcpy(Stack[++Top].num, "柒");
     break;

  case '8': strcpy(Stack[++Top].num, "捌");
     break;

  case '9': strcpy(Stack[++Top].num, "玖");
     break;

  case '0': if(strcmp(Stack[Top].num, "零") != 0){
      strcpy(Stack[++Top].num, "零");
     
     }
   
     break;
 
 }

}


void PutTen(int difference){
 switch(difference){
  case 1: strcpy(Stack[++Top].num, "拾");
    break;

  case 2: strcpy(Stack[++Top].num, "佰");
    break;

  case 3: strcpy(Stack[++Top].num, "仟");
    break;
 
 }

}


int CheckContinueZero(char* Str, int Now, int StrLen){
 int i;

 for(i = Now; i < StrLen; ++i){
  if(Str[i] == '0')
   continue;
  else
   break;
 
 }

 if(i == StrLen)
  return 1;
 else
  return 0;

}


void ConvertText(char* Str, int StrLen){
 int NowDigit = 0; 
 int Difference = 0; 

 for(; NowDigit < StrLen; ++NowDigit){

  if((StrLen-NowDigit) >= 9){
   Difference = StrLen - NowDigit - 9;

   if(CheckContinueZero(Str,NowDigit,StrLen))
    break;

   else
    Push(Str[NowDigit]);

   if(Str[NowDigit] != '0'){
    PutTen(Difference);
   
   }

   

   if(Difference == 0){
    strcpy(Stack[++Top].num, "億");
   
   }
 
  }
  else if((StrLen-NowDigit) < 9 && (StrLen-NowDigit) >=5){
   Difference = StrLen - NowDigit - 5;

   if(CheckContinueZero(Str,NowDigit,StrLen))
    break;

   else
    Push(Str[NowDigit]);

   if(Str[NowDigit] != '0'){
    PutTen(Difference);
   
   }

   if(Difference == 0){
    strcpy(Stack[++Top].num, "萬");
   
   }
 
  }
  else if((StrLen-NowDigit) > 0){
   Difference = StrLen - NowDigit - 1;


   if(CheckContinueZero(Str,NowDigit,StrLen))
    break;

   else
    Push(Str[NowDigit]);
   

   if(Str[NowDigit] != '0'){
    PutTen(Difference);
   
   }

  }
  

 }

}