PTA乙级1002【写出这个数】思路及代码(C语言/补充cpp及python解法)

博客分享了一位大二学生解决PAT乙级问题1002的方法,主要使用C语言,通过ASCII码转换处理大数加法。讨论了输入处理、数字转整型、输出拼音数字的策略,以及代码优化过程。还提及了后续补充的C++和Python解法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

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

基本思路
相信大家能找到这个博客肯定都是有对这道题经过一定思考之后再搜索的,想分享一下一个计算机系大二学渣的基本思路,目前我们还没有学【数据结构】之类的专业课,和其他大佬们比起来我唯一的优势或许就是能够解释的比较通俗易懂啦。其实开博客的,目的也就只是想要记录一下自己解这些题目的时候的思维,方便日后查漏补缺和更新。
以下是我的剖析:

  1. 首先是输入要求,是一个自然数,且不超过101位,有一定基础的同学肯定就已经知道了这个数过大超过了int、long之类的范围,只能通过char来定义了(非常惭愧的表示我好像java学的比c好一点,最近才开始补c可能废话会比较多)
  2. 输入问题解决了之后我们就要开始想下一步,也就是如何把这一串字符单个还原成int类型进行加运算。这里我搜了两个方法。一个是使用指针,btw这个不熟,我们用更简单的方法,直接ASCII码转换,用字符1减去48或者减去‘0’,这样我们就能得到整型的1
  3. 每一位数相加用for循环遍历 这个很简单就不多提
  4. 最后是输出拼音数字的问题,最开始我想用switch来实现,但是那样的话代码就太长了看着非常不清晰,最后我选择了定义一个字符串数组去存储我要输出的那十个数字拼音。(说来好笑,我还是算了一遍确定了无论如何之前求得的数字和都不会多过三位数才放心用if去做输出的。)
    ###其他一些琐碎的东西###
    最开始输出我用了switch嘛,其实非要用也可以的,定义一个函数也是很简单的。但关键是–最开始我完全没有想过用函数,记录一下最开始这个输出的傻代码。
switch(i/100)
	{
   
   
		case 0: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/100==0)
	{
   
   
		switch(i/10)
		{
   
   
			case 0:break;
	    	case 1:printf("yi ");break;
		    case 2:printf("er ");break;
		    case 3:printf("san ");break;
		    case 4:printf("si ");break;
		    case 5:printf
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值