音乐播放器
sola的小屋
 
文章 标签
17

Powered by Gridea | Theme: Fog
载入天数...
载入时分秒...
总访问量:  |   访问人数:

每日一题:1002 写出这个数

题目地址https://pintia.cn/problem-sets/994805260223102976/problems/994805324509200384

题目内容

作者
CHEN, Yue
单位
浙江大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100{10}^{100}

输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

我的解答

#include<cstdio>
#include<string>
using namespace std;

int main(void)
{
	char num[100] = {0};
	int i = 0;
	int sum = 0;
	string num_pinyin[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
	string out[3];

    scanf("%s",&num);
    while((num[i] != 0)&&(i <= 99)){
    	sum = sum + ((int)num[i] - 48);
    	i++;
    }

	if((sum/100) != 0){
		out[0] = num_pinyin[sum/100];
		out[1] = num_pinyin[(sum%100)/10];
		out[2] = num_pinyin[sum%10];
		printf("%s %s %s\n", out[0].c_str(), out[1].c_str(), out[2].c_str());
	}
	else if((sum/10) != 0){
		out[0] = num_pinyin[sum/10];
		out[1] = num_pinyin[sum%10];
		printf("%s %s\n", out[0].c_str(), out[1].c_str());
	}
	else
		printf("%s\n", num_pinyin[sum].c_str());

	return 0;
}

后记

第一次思考这个题目的时候,没有考虑到int型变量的范围限制,用int型进行输入的代码如下:

#include<cstdio>
#include<string>
using namespace std;
//此种方法只适合在比较小范围类的num,因为输入的是int型变量
int main(void)
{
	int num;
	int i = 0;
	int sum = 0;
	string num_pinyin[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
	string out[3];

    scanf("%d",&num);

	while((num/10) != 0){
		i = num % 10;
		sum = sum + i;
		num = num/10;
	}
	sum = sum + num;
//	printf("%d\n",sum);
	if((sum/100) != 0){
		out[0] = num_pinyin[sum/100];
		out[1] = num_pinyin[(sum%100)/10];
		out[2] = num_pinyin[sum%10];
		printf("%s %s %s\n", out[0].c_str(), out[1].c_str(), out[2].c_str());
	}
	else if((sum/10) != 0){
		out[0] = num_pinyin[sum/10];
		out[1] = num_pinyin[sum%10];
		printf("%s %s\n", out[0].c_str(), out[1].c_str());
	}
	else
		printf("%s\n", num_pinyin[sum].c_str());

	return 0;
}

但将int型输入改为char型时,还要注意转换时的数值大小。

另外,如果在C++中使用string,需要包括头文件#include<string>,以及要加上using namespace std;。而且,在输出字符串时,要注意添加.c_str()