問題解決のアイデア:
話題のショーによると、その数字まで 、すなわち100、999までの数値の和、その後、3桁の適切な表現までです。また、第一の出力を決定する方法であることに注意してください。残りの問題は、すでに個別に加算され、出力漢字を使用するデジタル・ストレージです。
長さとストレージのアレイ100であってもよいし、直接コードは比較的単純で書き込むことができ、長さを考慮してもレディ機能は、その長さを返すことができないベクトルvecotrまたは文字列であってもよく、これは怠惰選択する方法はありません、私たちは、表現するために、配列を使用しています。
getchar関数と文字が()1つの文字を読み取って、数字を読み取るには、通常、(そこにchar型の配列を使用するのではと思いますが、ループは読み、そして最終的に達成するためにint型の配列を選択するようにしながら、アカウントにファイルの終わりの終わりの条件を取ってしまいますEOF = 一般的な実装及びチャー)が符号なしです。なお、一方のコード出力サイクル、最終サイクルので、私は実際の最後のアクティブビット1大きいので、最初に必要なマイナス1よりも小さいながらアウト時間から合計。
次のようにソースコードは次のとおりです。
#include <stdio.h>
char word[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int main()
{
int num[100]; //存储各位数字
int count=0; //统计数字位数
int sum=0; //各位数字之和
while((num[count++]=getchar())!=EOF&&num[count-1]!='\n') //以ascii字符格式循环读取数据
;
for(int i=0;i<count-1;++i) //对数字求和
sum+=num[i]-48;
int digit[3]={0,0,0};
int i=0;
while(sum){
digit[i++]=sum%10; //逆序存储,输出时反序输出
sum/=10;
}
while(i--){ //因为本身上一个while出来后i就比最后一位有效值大1
printf("%s",word[digit[i]]);
if(i) printf(" "); //输出空格
}
return 0;
}