PAT 1002 写出这个数(很水)

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

说实话,这道题很水,但是对于刚接触编程的学者来说,作为练习还是可以的。因为要求学者的逻辑思维要清楚,这点很重要,不管是简单的,还是复杂的程序,都需要我们清晰的梳理自己的思维,才不会出现“明明样例都过了,为什么提交就WA呢”?出现这种情况,大部分原因是我们的逻辑不够清晰,不够完整。

这道题考的是将数字的各位数字以拼音的形式输出来。
第一步:分解数字;
对于刚入门的学者可能会想到分情况讨论;这个方法在这道题可以用,因为n不超过10的100次方,所以最大的sum不会超过909,;但是我不推荐大家用这种方法,因为它并不通用,当一个数的值更大的时候,你分类的情况就更多了,代码冗长,也不易于发现问题。
其实我们直接用一个while循环就可以解决。(注意sum为0时要特殊处理)

if(sum==0)
	cout<<a[0]<<endl;
else {
	while(sum!=0) {
		b[k++]=sum%10;
		sum=sum/10;
	}
	for(int j=k-1; j>0; j--)
		cout<<a[b[j]]<<" ";
	cout<<a[b[0]];//为了防止最后一个拼音后有空格
}

第二步:将数字以拼音形式呈现;
很简单,直接用一个字符串数组解决,
string a[10]= {“ling”,“yi”,“er”,“san”,“si”,“wu”,“liu”,“qi”,“ba”,“jiu”};
其实这种用常量数组实现对应关系的方法很常见,大家可以多学学!

为了便于道友们向我咨询问题,特意开设了一个免费的知识星球——CaptianXue,星球提供学习、理财、生活、职场等各类文章和免费答疑!!
在这里插入图片描述
直接上代码:


#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
string a[10]= {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int main() {
	int sum=0,len,i;
	string str;
	cin>>str;
	len=str.length();
	for(i=0; i<len; i++) {
		sum=sum+str[i]-'0';
	};
	int b[4];//存储sum的每位数
	int k=0;//sum的每位数的下标
	if(sum==0)
		cout<<a[0]<<endl;
	else {
		while(sum!=0) {
			b[k++]=sum%10;
			sum=sum/10;
		}
		for(int j=k-1; j>0; j--)
			cout<<a[b[j]]<<" ";
		cout<<a[b[0]];//为了防止最后一个拼音后有空格
	}
	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值