赞
踩
本来昨晚就写的差不多了,但发现一个问题:示例求和只能到45,刚开始还以为是零的情况未考虑导致,最后排查了一遍,并没有问题,今天晚上查了一下资料,发现未考虑int型输入超限了,示例有28位数字,最后改为字符串输入,将内容用字符数组存放,再减去'0'转换为数字,学到了。以下是原题:
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10的10次方。在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
我遇到的问题主要有三个,第一个就是开头提到的int问题;第二个是倒序问题,因为用迭代的方法求一个数的每一位数字,都是从最后一位求起(先求余,再除以10),输出结果是倒序的,我原本想了办法,将原来数字倒过来,后来因为int问题,无法实现,参考了(21条消息) PAT (Basic Level) Practice (中文)答案合集_幻想IT赴日的菜鸡一个-CSDN博客,发现可以通过中间数组,将内容一个一个存到数组里,再逆序输出;第三个,是汉字问题,我第一个想的是,switch(最后实现也是哈哈有点懒),将所有情况列出来,后来发现可以用字符数组的方法存取,char*res[10]={“1”,...},这样代码也比较简洁。
以下是我的代码:
#include<stdio.h>
#include <iostream>
using namespace std;
int main()
{
int sum=0;
string str;
cin >> str;
for(int i=0;i<str.length();i++)
sum+=str[i]-'0';
int temp[100],j=0;
while(sum!=0)
{
temp[j++] = sum % 10;
sum= sum/ 10;
}
for (j--; j >= 0; j--)
{
switch (temp[j])
{
case 0:printf("ling"); 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 (j != 0)
cout << " ";
}
return 0;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。