阅
每日一题:1002 写出这个数
题目地址https://pintia.cn/problem-sets/994805260223102976/problems/994805324509200384
题目内容
作者
CHEN, Yue
单位
浙江大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 。
输出格式:
在一行内输出 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()
。
赏