PAT乙组题解p1002心得

此题通过率比较低吧,在题库中通过率为0.25我也是被坑了许久才,修改完bug。主要是大二大三我们主要使用的都是Java语言,使用c++时间比较短,没有大一那么勤,特别是大三学期,只是使用c++和opencv库做过一个简单的视频特效。希望在完成PAT的题目过程中从新拾起c++,毕竟我对C/C++情有独钟,当然个人觉得最好不过Python,因为花哨啊!
题目描述:
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10的100次方;
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。

题解:

#include<iostream>
#include<stack>
#include<queue>
#include<string.h>
#include<string>
using namespace std;
int main() {
	char  Callatz[100];//用来保存所谓的输入串,特别注意点:不能认为输入的数字构成的是数值类型,你不能找到任意类型去保存如此大的数
	int count=0;//做加和存储
	int i = 0,j=0,x,mask=0;//计数器i,j;和暂存x,mask作为判断标准,当然mask可以设置为bool类型
	queue<string> sr;//保存转载后的数字的拼音
	stack<int> in;//保存分离后的单个数字
	string str;//同x一样作为暂存
	cin >> Callatz;
	while (sizeof(Callatz) > 0&&Callatz[j]!='\0') {
		count += ((int)Callatz[j]-48);//这里是ASCII码的转换为数字。读入的是数字是以ASCII码存储,但是0~9ASCII码是48开始的,所以要减去48才为数值本身(我就是在这里被坑得)
		j++;//数组移位
	}
	while (count!= 0) {
		in.push(count % 10);//在int类型的栈中存储count加和后的每一位
		count = count / 10;
		i++;
	}
	while (!in.empty())//整个while循环都在做数字和拼音的转换,建议将下面的那些个if语句换成switch~case语句,这样大规模使用if语句是不规范的,但是我比较懒(哈哈哈,原谅我) 
	{
		x = in.top();//获取
		in.pop();//出栈
		if (mask!=0) {
			mask++;//mask就是个标示是不是第一个元素,毕竟题目要求最后一个数字哪儿后面没空格嘛
			if (x == 1)
				sr.push(" yi");
			if (x == 2)
				sr.push(" er");
			if (x == 3)
				sr.push(" san");
			if (x == 4)
				sr.push(" si");
			if (x == 5)
				sr.push(" wu");
			if (x == 6)
				sr.push(" liu");
			if (x == 7)
				sr.push(" qi");
			if (x == 8)
				sr.push(" ba");
			if (x == 9)
				sr.push(" jiu");
			if (x == 0)
				sr.push(" ling");
		}
		else {
			mask++;
			if (x == 1)
				sr.push("yi");
			if (x == 2)
				sr.push("er");
			if (x == 3)
				sr.push("san");
			if (x == 4)
				sr.push("si");
			if (x == 5)
				sr.push("wu");
			if (x == 6)
				sr.push("liu");
			if (x == 7)
				sr.push("qi");
			if (x == 8)
				sr.push("ba");
			if (x == 9)
				sr.push("jiu");
			if (x == 0)
				sr.push("ling");
		}

	}
	while (!sr.empty()) {
		str += sr.front();//用来产生一个字串
		sr.pop();
	}
	cout << str;//输出字串
	return 0;
}

其实整个题目不是特别难,特别是用c++语言实现,因为这样的高级语言含有stack,queue这么优秀的结构。
总结几点

  • 第一着手写程序的时候心中还是有个大概的
  • 第二了解题目中要求数据的数据大小,注意是否一般数据类型是否满足条件,不满足可以借助字符来帮助存储哦
  • 第三就是这个程序让我再次的深刻体会到,下次写有关ASCII码相关的程序,还是要查询ASCII码表,要不很容易把ASCII码和数字转换搞乱

猜你喜欢

转载自blog.csdn.net/github_38591120/article/details/86562727
今日推荐