本題要求讀取一個超長自然數(最多 10^100),計算其各位數字之和,並將和的每一位轉換為漢語拼音輸出,拼音間以單空格分隔,行末無多餘空格。
sprintf() 而非非標準的 itoa(),符合 ANSI C 標準#include <stdio.h>
#include <string.h>
int main() {
char *num[] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
char ch, s[3], *p = s;
int sum = 0;
// 逐字符讀取並累加
while ((ch = getchar()) != '\n') {
sum += ch - '0';
}
// 整數轉字符串
sprintf(p, "%d", sum);
int len = strlen(s);
// 輸出拼音
for (int i = 0; i < len; i++) {
printf("%s", num[s[i] - '0']);
if (i != len - 1) printf(" ");
else printf("\n");
}
return 0;
}
輸入:1234567890987654321123456789
輸出:yi san wu
解析:各位數字和為 135,拼音對應 "yi san wu"。
ch != '\n'sprintf 目標緩衝區需足夠大(此處和最大為 900,3 位字符足夠)