您的位置:首页 > 其它

1002. 写出这个数 (20)

2017-10-08 16:40 267 查看

原题: https://www.patest.cn/contests/pat-b-practise/1002
参考: https://www.geek-share.com/detail/2694369980.html

实现思路:
按照题目要求: 自然数

n < 10^100
, 则可知所求的和
sum < 900
, 也就是和
最多只能是三位数.
利用C语言提供的
getchar()
, 每次读入一个数并计算和. 求出和记录在
sum
中.
利用C语言2维字符数组, 定义数字拼音字符串. 接下来利用求余数的方法, 分别拿到
一个3位数, 百位十位个位, 是多少.

实现代码:

#include <stdio.h>

int main () {
char ch;
int num[4]; // 数组下标0, 不用
int sum = 0;
int i;
char pinyin[10][20] = {
"ling",
"yi",
"er",
"san",
"si",
"wu",
"liu",
"qi",
"ba",
"jiu"
};

while ((ch = getchar()) != '\n') {
sum += ((int)(ch) - (int)('0'));
}
intToArray(num, sum);

if (num[1] == 0 && num[2] == 0) {
printf("%s\n", pinyin[num[3]]);
} else if (num[1] ==0 && num[2] != 0) {
printf("%s %s\n", pinyin[num[2]], pinyin[num[3]]);
} else {
printf("%s %s %s\n", pinyin[num[1]], pinyin[num[2]], pinyin[num[3]]);
}

return 0;
}

// 整型转数组
// 参数: arr[]存放转好的数, x要转的数, x范围[0, 900)
void intToArray (int arr[], int x) {
int m1; // 百位余数
int m2; // 十位余数
int m3; // 各位余数
m1 = (int)(x / 100);
m2 = (int)(x / 10) % 10;
m3 = x % 10;
arr[0] = 0; // 占个坑位
arr[1] = m1; // printf("%d\n", arr[1]);
arr[2] = m2; // printf("%d\n", arr[2]);
arr[3] = m3; // printf("%d\n", arr[3]);
// m1, m2, m3的合法取值是[0, 9]
}

/*
测试用例:
输入: 123456789
输出: si wu

输入: 123
输出: liu
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: