首页 > 代码库 > PAT甲级1005 Spell It Right

PAT甲级1005 Spell It Right

题目:PAT甲级 1005

 

题解:水题。看到题目的第一时间就在想一位一位的mod,最后一加一转换就完事了。结果看到了N最大为10的100的次方,吓得我赶紧放弃这个想法...

  发现碰到这种情况用字符串十分好用,这道题应该考察的就是这一点。大致思路就是把数字的每一位放到字符串中,然后通过ASCII码得到每一位的相加结果num,然后把num一位一位的放到stack中,使用stack是因为它先进先出的特性,最后输出就行了。

 

代码:

 1 #include<cstdio>
 2 #include<queue>
 3 #include<iostream>
 4 #include<cstring>
 5 #include<stack>
 6 #define maxn 102
 7 using namespace std;
 8 
 9 char s[maxn];
10 int num,len,mid;
11 stack<string> q;
12 
13 void tran(int n)
14 {
15     if(n==0) q.push("zero");
16     else if(n==1) q.push("one");
17     else if(n==2) q.push("two");
18     else if(n==3) q.push("three");
19     else if(n==4) q.push("four");
20     else if(n==5) q.push("five");
21     else if(n==6) q.push("six");
22     else if(n==7) q.push("seven");
23     else if(n==8) q.push("eight");
24     else if(n==9) q.push("nine");
25 }
26 
27 int main()
28 {
29     scanf("%s",s);
30     num=0;len=strlen(s);
31     for(int i=0;i<len;i++)
32     {
33         num+=(s[i]-48);
34     }
35     if(num==0)//注意为0的情况
36     {
37         cout<<"zero";
38     }
39     else
40     {
41         while(num>0)
42         {
43             tran(num%10);
44             num/=10;
45         }
46         while(!q.empty())
47         {
48             cout<<q.top();
49             q.pop();
50             if(!q.empty()) printf(" ");
51         }
52     }
53     return 0;
54 }

 

PAT甲级1005 Spell It Right