PAT乙级1002题 写出这个数 (20 分)——C

PAT乙级1002 写出这个数 (20 分)——C


题目描述

在这里插入图片描述


做题思路

  • 想到用数组取录入输入的数字,并用数字的遍历求和,但是数字很大,经过测试long long也无法装下,所以只能用字符数组来录入
  • 用switch case来把数字转换为拼音
  • 根据题目要求,不能在switch case中的条件句后添加空格,只能在求出总数后,再对数字进行位数的分解,插入空格,根据数字位的排序,要用到递归中栈的属性

题目代码

#include <stdio.h>


//函数声明 
int translate(int x); 
int space(int x);

int main()
{

	long long n = 0;
	char a[101] = {0};
	int i= 0;

	scanf("%s",a);
	while(a[i])
	{
		n += a[i]-'0';
		i++;
	}
	space(n);
	
	return 0; 
}


//函数定义
int space(int x)
{
	if(x)  
	{
		space(x/10);
			if(x>9)
		{
			printf(" ");
		}
		translate(x%10);
	}			
	return 0;
}


int translate(int x)
{
	switch(x)
	{
		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;
		case 0:
			printf("ling");break;
		
	}
	return 0;
}

在这里插入图片描述


总结

  • 数组的录入可以用char,然后用数字的编码减去‘0’,就可以得到数字在编码中的数
  • 录入数字有两个 方法,我自己用的是输入到数组里,再从数组取出来,会比较麻烦;还有一个方法就是取数字在编码中的数,不需要数组这个媒介,会简单很多(后面发现数字量大了后必须使用字符数组来输入)
  • 可以用递归简化程序,但目前自己还掌握的不好
  • 数组可以用while循环,不用for循环,因为不确定循环多少次时用while更方便
  • 特别大的数可以用long long,在第一次写时用的long,发现不够用(scanf输入longlong型数据时,需要用%lld,本题之前做的时候用的整数数组,后来改成了字符数组,这个就没用上)
  • 尽量把程序函数写出mian函数,用声明看着简洁一些
  • if(x)不等于0时,程序运行
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值