PAT乙级:写出这个数(1002)

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

输入格式:每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10的一百次方

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

样例:1234567890987654321123456789

输出:yi san wu

题目大致意思就是让你输出一个整数然后个十百千位每个位上的数字相加,得出的结果

用拼音显示并严格按照输出格式,同时在写代码时不能加任何的提示代码:printf("输出一个数")这样的,系统会直接判错(被坑过好几次(~.~))

还有一个注意点,系统测试时的样例不止一个,所以也不要抱着侥幸心理,认为只要答案对了就行,要保证在大部分的极端的输入内容下正确

在本题中,从样例可以看出,给的数字很大,基本上是没有一个数据类型能存放下这个数字,所以在这里可以用数组解决

#include<stdio.h>
//计算输入整数各位的和 int sum_all(char n[],int l) { int sum = 0; for (int k = 0; k < l; k++) { sum =sum+n[k]-48;//本例所用字符类型数组,'0'在Ascll中为48 } return sum; }
//计算乘幂,因为库中的乘幂函数是返回double类型,所以得自己写一个int类型
int int_power(int s,int p) { int result = 1; for (int j = 0; j < p; j++) { result *= s; } return result; }
//判断求和后各个位置的数,并给出拼音
void judge(int s) { switch (s) { 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; default: printf("error"); } } int main() { char num[101] = { 0 }; int i = 0; char ch = 0; do { ch = getchar(); num[i] = ch; i++; }while (ch!= '\n');//while循环中的代码功能数敲回车结束输入 int sum = 0; sum = sum_all(num, i-1);//求和 int length = 0,Sum=0; Sum = sum; while (Sum) {
//计算求和后是几位整数 Sum
/= 10; ++length; } for (int j = length; j>0; j--) { int power = int_power(10,j-1 ); judge(sum /power);//顺序输出,判断第一位,对sum取整 sum %= int_power(10, j - 1);//改变sum的值 if (j != 1) { printf(" ");//遵照题目给的输出格式要求 } } return 0; }

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

猜你喜欢

转载自www.cnblogs.com/zongji/p/12193880.html