PTA乙级 1002写出这个数

1002写出这个数

题目

1002 写出这个数 (20)(20 分)
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100
输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu

问题分析

  1. 单独取每一位的方法:n%10取个位,n/10舍弃最后一个数字
  2. 注意:输入要求不超过101位,可能会超过int、long之类的范围,只能通过char来定义了
  3. 把字符串还原成整数:用字符减去48或者减去‘0’
    EX
char c='3';
int i = c - 48;   //ASCII码
int i = c - '0';

错误代码

int main()
{
	int n,b[101];  //int型使得数据丢失
	scanf("%d",&n);
	int i,sum=0;
    while(n!=0){
        sum+=n%10;
        n/=10;
    }

更正

#include<stdio.h>

int main()
{
	char a[101];
	int b[101];
	gets(a);
	int i,sum=0,length;
	length=strlen(a);
	for (i=0;i<length;i++)
	sum+=(a[i]-'0');  //将字符转化为整形

	for (i=0;sum;i++)
	{
		b[i]=sum%10;
		sum/=10;
	}
	for (i--;i>=0;i--)
	{
		switch (b[i])
		{
			case 0:
			  printf("ling");
			  break;
			case 1:
			  printf("yi");
			  break;
			case 2:
			  printf("er");
			  break;
			case 3:
			  printf("san");
			  break;
			case 4:
			  printf("si");
			  break;
			case 5:
			  printf("wu");
			  break;
			case 6:
			  printf("liu");
			  break;
			case 7:
			  printf("qi");
			  break;
			case 8:
			  printf("ba");
			  break;
			case 9:
			  printf("jiu");
			  break;
		}
		if (i!=0)
		printf(" ");
	}
	return 0;
}

上一篇:1002 写出这个数(乙级)


下一篇:PAT Basic 1002