PAT乙级.1002. 写出这个数 (20)
2016-07-24 22:51
423 查看
1002. 写出这个数 (20)
题目:
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。输入格式:
每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10^100。
输出格式:
在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
思路:
1.以字符数组的形式读入给出的自然数n,并用strlen函数获取n的长度。且因为n<10^100,字符数组最小为10^101char str[110];
gets(str); int len = strlen(str);
之后枚举字符数组每一位,将字符对应的数字进行累加
for (int i = 0; i<len; i++) { sum += str[i] - '0'; //将每一位累加 }
将sum每一位压入堆栈中,并用计数器cnt计数
调用Num_to_String函数按格式输出
代码:
version1.0(Num_to_String函数版)
/** * @tag PAT_B_1002 * @authors R11happy (xushuai100@126.com) * @date 2016-07-17 15:53:16-16:45 * @version 1.0 * @Language C++ * @Ranking 35/7667 */ #include <iostream> #include <cstring> #include <string> #include <stack> using namespace std; string Num_to_String(int n) { if (n == 0) return "ling"; else if (n == 1) { return "yi"; } else if (n == 2) { return "er"; } else if (n == 3) { return "san";/* code */ } else if (n == 4) { return "si"; } else if (n == 5) { return "wu"; } else if (n == 6) return "liu"; else if (n == 7) return "qi"; else if (n == 8) return "ba"; else if (n == 9) return "jiu"; else return "ERROR"; } int sum; int cnt; int main() { char str[110]; gets_s(str); int len = strlen(str); for (int k = 0; k < len; k++) sum += str[k] - '0'; stack<int> st; int n; while (sum>9) { n = sum % 10; st.push(n); sum /= 10; cnt++; } cout << Num_to_String(sum); for (int i = 0; i < cnt; i++) { cout << " " + Num_to_String(st.top()); st.pop(); } return 0; }
version2.0(二维数组版,摘自晴神算法笔记)
#include <cstdio>
#include <cstring>
char str[110];
int main()
{
gets(str);
int len = strlen(str);
int sum = 0; //sum存放所有数位之和
for (int i = 0; i<len; i++) { sum += str[i] - '0'; //将每一位累加 }
int num = 0, ans[10]; //num表示sum的位数
while (sum != 0)
//将sum的每一位存到ans[]数组中,sum的低位存到ans[]的低位
{
ans[num] = sum % 10;
num++;
sum /= 10;
}
/*进行数字和字符串的转换*/
char change[10][5] = {
"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"
};
for (int i = num - 1; i >= 0; i--)
{//从高位开始输出
printf("%s", change[ans[i]]);
if (i > 0)
printf(" ");
else
printf("\n");
}
return 0;
}
收获:
1.数字和字符之间的转化可以考虑用二维数组来存,更简单char change[10][5] = { "ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu" };
之后输出要注意:
for (int i = num - 1; i >= 0; i--) {//从高位开始输出 printf("%s", change[ans[i]]); if (i > 0) printf(" "); else printf("\n"); }
VS2015采用新标准,其中的gets函数要换成gets_s函数
gets_s(str);
相关文章推荐
- BAT批处理中的字符串处理详解(字符串截取)
- Lua函数与字符串处理简明总结
- asp.net 常用字符串处理方法
- Oracle 存储过程总结 二、字符串处理相关函数
- 学习php笔记 字符串处理
- PHP字符串处理的10个简单方法
- PHP5 字符串处理函数大全
- Perl 字符串处理备忘录
- 从Discuz里拿出来的PHP字符串加密函数
- 收藏几个支持中文的PHP字符串截取函数
- php字符串截取问题
- php字符串截取中文截取2,单字节截取模式
- PHP字符串 ==比较运算符的副作用
- PHP字符串处理的10个简单方法
- 第4章 数据处理-php字符串的处理-郑阿奇(续)
- 几个有用的php字符串过滤,转换函数代码
- php字符串分割函数explode的实例代码
- PHP字符串的编码问题的详细介绍
- 基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
- 探讨各种PHP字符串函数的总结分析