C语言 |
您所在的位置:网站首页 › 正行的拼音 › C语言 |
题目:
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。 输入格式:每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。 输出格式:在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。 输入样例: 1234567890987654321123456789 输出样例: yi san wu
原以为自己是C语言老手了,应该没什么太大问题。结果在这道题上花了很多时间,大概总结了一下原因: 语言学习太多,语言之间的用法有些混淆。C语言的字符串以及指针部分使用得还是不是很熟练。严格按要求输出。之前为了方便调试,中间输出了一些参数,导致后面测试的时候因为多了一些东西认为结果是错误。
#include #include int main(void) { //part 1:计算输入数字每一位的和 int sum = 0; char ch; ch = getchar(); while (ch != '\n') { switch (ch) { case '1': sum += 1; break; case '2': sum += 2; break; case '3': sum += 3; break; case '4': sum += 4; break; case '5': sum += 5; break; case '6': sum += 6; break; case '7': sum += 7; break; case '8': sum += 8; break; case '9': sum += 9; break; default: sum += 0; break; } ch = getchar(); } //part 2:难点:char和指针的使用 //sum每一位对应翻译成拼音,存入指针数组中,但是这是逆序! char *result[100]; int digit_count = 0; while(sum != 0) { int digit = sum % 10; switch (digit) { case 0: result[digit_count] = "ling"; break; case 1: result[digit_count] = "yi"; break; case 2: result[digit_count] = "er"; break; case 3: result[digit_count] = "san"; break; case 4: result[digit_count] = "si"; break; case 5: result[digit_count] = "wu"; break; case 6: result[digit_count] = "liu"; break; case 7: result[digit_count] = "qi"; break; case 8: result[digit_count] = "ba"; break; case 9: result[digit_count] = "jiu"; break; default: break; } sum = sum / 10; digit_count++; } //逆序输出指针数组中的内容,注意加空格,以及最后一个拼音后面不加空格 char result_string[100] = ""; for (int i = digit_count - 1; i >= 0; i--) { if(i==0) strcat(result_string, result[0]); else { char p[10]; strcpy(p, result[i]); strcat(p, " "); strcat(result_string, p); } } printf("%s", result_string); return 0; } |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |