1002 写出这个数 ——c++实现

1.题目介绍

2. 思路

这道题目较好理解,只是实现起来有几点要注意:

(1)正整数的范围。题目中规定n<10^100,这是个很大的数字。long long类型最大到2^63-1,也远小于这个数。但我最开始没有考虑这一点,用的long long。参考别人的代码时发现有用char型数组的,或者干脆直接用char进行循环读入的,最终我采用后者方式,感觉这样不会占用太多内存。

(2)将求和结果转为汉语拼音输出。这就需要对整形的求和结果进行单个数字的拆分。我开始想的是将数字转换为int数组。如果用除10取余的方式分隔每个数字,显然从低位向高位分隔比较容易,所以我转换的int数组是逆序的。这也不要紧,再逆序对应每个数字输出拼音就好了。我用这个方法实现了,是可以的,就是显得有点笨。

        参考大佬代码时,发现string竟然有to_string()这个方法,这可太好了,果断用起,技能+1

(3)题目要求拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。我本能的反应就是除了末尾,每次输出一个拼音和一个空格。但这就需要判断哪里是末尾了。对字符串类型好说,用size()方法或length()方法就可以,但对数组来说并不好判断(怪我知道的太少55)。再次参考大佬代码,嗯,先输出空格再输出拼音就方便得多了,因为这样只需判断开头就可以了~

(3)最后一点就是,对字符类型的数字做运算时,一定要记得-'0'

3. 具体代码实现

#include <iostream>
#include <string>    //c++的字符串类型要包括头文件
using namespace std;
int main() {
	int count = 0;
	char ch;
	while((ch=getchar())!='\n')    //循环读入每个数字
           count+=ch-'0';              //读入的同时做求和运算
	string piny[] = { "ling", "yi", "er", "san", "si", "wu", "liu","qi","ba","jiu"};
	string num = to_string(count);     //将求和结果转变为字符串类型
	for (int i = 0; i < num.size(); i++) {   //字符串类型可以用size()和length()方法求长度
		if(i != 0) cout << " ";   //保证拼音数字间有1空格,但最后一个拼音数字后没有空格
		cout << piny[num[i] - '0'];
	}
	return 0;
}

4.收获

(1)数字很大并且不需要对整体进行运算时,可以考虑字符或字符数组的方式进行读入或存储

(2)to_string()方法可以将int转换为string类型

(3)发现c++的string类型可以通过下标获取元素,java好像不可以..(要记住)

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值