C++ PAT乙级1002 写出这个数

题目要求:

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入格式

每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10​100​​。
输出格式
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。

注意:

这道题没太大难度,就是注意的细节多(PAT编译器竟然禁止用gets函数了!害!多方便好用的函数啊!)
细节一:加和之后是0,需要单独输出处理
细节二:可输出小于1000位的数,因此要注意如何计算有多少位数。个位数也要考虑进去
细节三:输出到拼音时注意输出格式要求最后一个没空格,所以空格位置放置要注意
其他就很简单了,switch匹配该输出的拼音,由高位向低位输出,每次输出后待输出位去掉刚输出的高位(与现存位数取模,现存位数之后除10,减一位)

这是之前做的题目,大致就这样的。之后我会时不时更新PAT的题目,欢迎指正交流。

#include 
#include 
using namespace std;
char array[1000];   //输入长度限制
int sum=0;
int main()
{
     
  int i=0;
  char c;
  while(i<1000)
    {
     
        c=getchar();  //获取输入字符
        if(c>='0'&&c<='9')
		{
     
			ungetc(c,stdin);
			cin>> array[i++];
		}
		if(c=='\n') break;
    }
  for(int j=0;j<i;j++)
  {
     
    sum=sum+array[j]-48;   //ascii码与数字差48
  }
  if(sum==0) cout<<"ling";
  int sum2=sum;
  int p=1;
  int m=0;
  while(sum2>9) //计算位数
  {
     
      p*=10;
      sum2/=10;
  }
  for(;p>0;)
  {
     
      m=sum/p;
      switch(m)
      {
     
        case 0:cout<<"ling";break;
				case 1:cout<<"yi";break;
				case 2:cout<<"er";break;
				case 3:cout<<"san";break;
				case 4:cout<<"si";break;
				case 5:cout<<"wu";break;
				case 6:cout<<"liu";break;
				case 7:cout<<"qi";break;
				case 8:cout<<"ba";break;
				case 9:cout<<"jiu";break;

      }
      
      sum=sum%p;  //计算下一个高位
      p=p/10;     //每次减少一位
      if(p>0) cout<<' ';

  }
  return 0;
}

结果截图:
C++ PAT乙级1002 写出这个数_第1张图片

你可能感兴趣的:(PAT乙级真题,c++)