1002.写出这个数 (20)
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。
输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
Answer:
#include<iostream>
#include<stdio.h>
#include<memory.h>
#define MAX 101
#define NUM 3
using namespace std;
const char* cast_number(int a) {
switch(a){
case 0: return "ling";
case 1: return "yi";
case 2: return "er";
case 3: return "san";
case 4: return "si";
case 5: return "wu";
case 6: return "liu";
case 7: return "qi";
case 8: return "ba";
case 9: return "jiu";
}
return "";
}
void print_pinyin(int sum) {
int nums[NUM];
int divisor = 10;
for(int i = 0;i < NUM;i ++) {
nums[i] = sum % divisor;
sum /= divisor;
}
if(nums[2] != 0)
for(int i = 2;i > 0;i --)
cout << cast_number(nums[i]) << ' ';
else if(nums[1] != 0)
cout << cast_number(nums[1]) << ' ';
cout << cast_number(nums[0]) << endl;
}
int get_sum() {
char* numbers = new char[MAX];
memset(numbers,'\0',MAX);
cin.getline(numbers, MAX);
int sum = 0;
while(*numbers) {
sum += (*numbers++) - '0';
}
return sum;
}
int main() {
int sum = get_sum();
print_pinyin(sum);
return 0;
}
备注:
因为这道题,知道了cin.getline()
这个函数。
原型:
istream& getline (char* s, streamsize n );