PAT B級1002はこの数(20点)を書きます
タイトル
正の整数nを読み込み、その各数字の和を計算し、中国語のピンインで和の各数字を書きます.入力フォーマット:各テスト入力には、自然数nの値を与える1つのテスト例が含まれます.ここではnが10100未満であることを保証する.出力フォーマット:1行にnの各数字の和の各ビットを出力し、ピンイン数字の間に1スペースがあるが、1行の最後のピンイン数字の後にスペースがない.入力サンプル:1234567890987654321123456789出力サンプル:yi san wu
ソースプログラム(C++)
この問題は解析から分かるように,まずnビット毎の数字の和sumを求めることであり,nの上限が極めて大きいためint,longなどで直接格納することはできず,nを文字配列(文字列)として処理する必要がある.また我々の目的はsumを求めるだけであり,nの具体的な値とは何の関係もないので,nの各ビットを1つの配列を単独で定義して格納する必要はなく,getchar()関数によって1つずつ読み取り,蓄積し,破棄するだけでよい.s’-'0’はsの数値である.
タイトルから分かるn<10100は、n<10の場合nが1桁、n<102の場合nが2桁……なので、n<10100の場合nが最大100桁、最大999……9(100個9)、そのsumが900なので、sum毎の数字を格納する配列長が3であれば十分、コード中の#define max 3およびint d[max]である.
定数2次元文字配列(文字列配列)pinyinを定義し、0~9のピンインを順次格納することで、配列の下付き文字が数値やピンインにぴったり対応し、非常に便利です.
ソースプログラム(C)
正の整数nを読み込み、その各数字の和を計算し、中国語のピンインで和の各数字を書きます.入力フォーマット:各テスト入力には、自然数nの値を与える1つのテスト例が含まれます.ここではnが10100未満であることを保証する.出力フォーマット:1行にnの各数字の和の各ビットを出力し、ピンイン数字の間に1スペースがあるが、1行の最後のピンイン数字の後にスペースがない.入力サンプル:1234567890987654321123456789出力サンプル:yi san wu
ソースプログラム(C++)
この問題は解析から分かるように,まずnビット毎の数字の和sumを求めることであり,nの上限が極めて大きいためint,longなどで直接格納することはできず,nを文字配列(文字列)として処理する必要がある.また我々の目的はsumを求めるだけであり,nの具体的な値とは何の関係もないので,nの各ビットを1つの配列を単独で定義して格納する必要はなく,getchar()関数によって1つずつ読み取り,蓄積し,破棄するだけでよい.s’-'0’はsの数値である.
タイトルから分かるn<10100は、n<10の場合nが1桁、n<102の場合nが2桁……なので、n<10100の場合nが最大100桁、最大999……9(100個9)、そのsumが900なので、sum毎の数字を格納する配列長が3であれば十分、コード中の#define max 3およびint d[max]である.
定数2次元文字配列(文字列配列)pinyinを定義し、0~9のピンインを順次格納することで、配列の下付き文字が数値やピンインにぴったり対応し、非常に便利です.
//1002 (20 )
//Yuanxing Xu
#include
#define max 3
using namespace std;
const char* pinyin[] = {
"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int main() {
char c;
int sum=0;
while((c=getchar())!='
')
sum += c-'0';
//cout<
int i,d[max];
for(i=0;i<max&&sum!=0;i++){
d[i]=sum%10;
sum/=10;
}
i--;
for(;i>=0;i--){
if(i==0)
cout<<pinyin[d[i]]<<endl;
else
cout<<pinyin[d[i]]<<" ";
}
return 0;
}
ソースプログラム(C)
//1002 (20 )
//Yuanxing Xu
#include
#define max 3
const char* pinyin[] = {
"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int main() {
char c;
int sum=0;
while((c=getchar())!='
')
sum += c-'0';
//printf("%d
",sum);
int i,d[max];
for(i=0;i<max&&sum!=0;i++){
d[i]=sum%10;
sum/=10;
}
i--;
for(;i>=0;i--){
if(i==0)
printf("%s
",pinyin[d[i]]);
else
printf("%s ",pinyin[d[i]]);
}
return 0;
}