原题连接:https://www.patest.cn/contests/pat-a-practise/1005
这道题我是将读入的数处理后进行相加,然后统计总数的位数,然后将总数不断的取余、模10,每次余数入栈,最后进行输出。
总的来说我的思路以及方法还是稍有繁琐,尤其是输出那块。代码如下:
1 #include2 #include 3 #include 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())!='\n') 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 }
然后参考了他人的代码,别的不说,单就输出那块用了hash映射是我需要学习和掌握的地方:
1 #include2 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=='\n')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 }