1005. Spell It Right (20)

原题连接:https://www.patest.cn/contests/pat-a-practise/1005

这道题我是将读入的数处理后进行相加,然后统计总数的位数,然后将总数不断的取余、模10,每次余数入栈,最后进行输出。

总的来说我的思路以及方法还是稍有繁琐,尤其是输出那块。代码如下:

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<stdbool.h>
  4 typedef struct SNode{
  5     int Data;
  6     struct SNode *Next;
  7 }Stack;
  8 
  9 Stack *CreatStack()
 10 {
 11     Stack *S=malloc(sizeof(struct SNode));
 12     S->Next=NULL;
 13     return S;
 14 }
 15 
 16 void Push(Stack *S,int X)
 17 {
 18     Stack *cell=malloc(sizeof(struct SNode));
 19     cell->Data=X;
 20     cell->Next=S->Next;
 21     S->Next=cell;
 22 }
 23 bool IsEmpty(Stack *S)
 24 {
 25     return (S->Next==NULL);
 26 }
 27 int  Pop(Stack *S)
 28 {
 29     if (!IsEmpty(S)){
 30     int X;
 31     Stack*Tmpcell=malloc(sizeof (struct SNode));
 32     Tmpcell=S->Next;
 33     X=Tmpcell->Data;
 34     S->Next=Tmpcell->Next;
 35     free(Tmpcell);
 36     return X;}
 37 }
 38 
 39 int main()
 40 {
 41     char c;
 42     int  s=0;
 43     int X,Data;
 44     Stack *S;
 45     S=CreatStack();
 46 
 47     while ((c=getchar())!='
')
 48     {
 49         s+=c-'0';
 50     }
 51 
 52     int tmp=s;
 53     int cnt=1;
 54     while((tmp/=10))cnt++;
 55 
 56     while(cnt--){
 57     X=s%10;
 58     Push(S,X);
 59     s/=10;
 60     }
 61 
 62     int flag=0;
 63     while (!IsEmpty(S))
 64     {
 65         Data=Pop(S);
 66         switch (Data)
 67         {
 68             case 1:
 69             {
 70                 if (!flag){printf("one");flag=1;}
 71                 else printf(" one");
 72             }break;
 73             case 2:
 74             {
 75                 if (!flag){printf("two");flag=1;}
 76                 else printf(" two");
 77             }break;
 78             case 3:
 79             {
 80                 if (!flag){printf("three");flag=1;}
 81                 else printf(" tree");
 82             }break;
 83             case 4:
 84             {
 85                 if (!flag){printf("four");flag=1;}
 86                 else printf(" four");
 87             }break;
 88             case 5:
 89             {
 90                 if (!flag){printf("five");flag=1;}
 91                 else printf(" five");
 92             }break;
 93             case 6:
 94             {
 95                 if (!flag){printf("six");flag=1;}
 96                 else printf(" six");
 97             }break;
 98             case 7:
 99             {
100                 if (!flag){printf("seven");flag=1;}
101                 else printf(" seven");
102             }break;
103             case 8:
104             {
105                 if (!flag){printf("eight");flag=1;}
106                 else printf(" eight");
107             }break;
108             case 9:
109             {
110                 if (!flag){printf("nine");flag=1;}
111                 else printf(" nine");
112             }break;
113             case 0:
114             {
115                 if (!flag){printf("zero");flag=1;}
116                 else printf(" zero");
117             }break;
118         }
119     }
120     return 0;
121 }
View Code

然后参考了他人的代码,别的不说,单就输出那块用了hash映射是我需要学习和掌握的地方:

 1 #include<stdio.h>
 2 int main()
 3 {
 4     char str[10][6]={"zero", "one", "two", "three", "four", "five", "six",
 5         "seven", "eight", "nine"};
 6     int arr[5];
 7     int index=0;
 8 
 9     char ch;
10     int sum=0;
11     while (1)
12     {
13         scanf("%c",&ch);
14         if (ch>='0' && ch<='9')sum+=(ch-'0');
15         else if (ch=='
')break;
16     }
17     if (sum==0){printf("zero");return 0;}
18     while(sum)
19     {
20         arr[index++]=sum%10;
21         sum/=10;
22     }
23     int i;
24     for(i=index-1;i>=0;i--)
25     {
26         printf("%s",str[arr[i]]);
27         if (i)printf(" ");
28     }
29     return 0;
30 }
View Code
原文地址:https://www.cnblogs.com/wuxiaotianC/p/6298463.html