PAT 7-42 C言語練習問題
7-42独身者の除去(20点)
ここでいう「独身ワンマン」とは、独身ワンマンとか~すべてが1からなる数字、例えば1、11、111、1111などを指すわけではありません.どの独身者も5で終わらない奇数で除けるという伝説がある.例えば、111111は13で除去することができる.今、あなたのプログラムは整数
ヒント:明らかな方法は、
入力形式:
入力は、5で終了しない正の奇数
出力フォーマット:
対応する最小
サンプルを入力:
出力サンプル:
#include
int main () {
int n, len = 0, p = 0, now = 1;
char ans[1001];
scanf("%d", &n);
while (++len ) {
if( p || now/n )
{ans[p++] = '0' + now/n;}//保存者、文字に変換
printf("%c",'0' + now/n) ;
now %= n;//余剰を取って、
if(now==0){//余数は0で、整除できることを説明します
ans[p] = '\0';//文字列終端を付ける
printf("%s %d", ans, len);
break;
}
now = now * 10 + 1;//1を追加
}
return 0;
}
ここでいう「独身ワンマン」とは、独身ワンマンとか~すべてが1からなる数字、例えば1、11、111、1111などを指すわけではありません.どの独身者も5で終わらない奇数で除けるという伝説がある.例えば、111111は13で除去することができる.今、あなたのプログラムは整数
x
を読み込みます.この整数は奇数で、5で終わりません.そして、計算により、2つの数字が出力される.1番目の数字はs
であり、x
にs
を乗じたものが光棒であり、2番目の数字はn
がこの光棒の桁数であることを示す.このような解はもちろん唯一ではありません.テーマはあなたに最小の解を出力するように要求します.ヒント:明らかな方法は、
x
を除去できるまで、独身者の数を徐々に増やすことです.しかし、難点は、s
が非常に大きな数である可能性があることである.例えば、プログラム入力31は、3584229390681および15を出力する.31に3584229390681を乗じた結果は111111111111であり、合計15個の1であるからである.入力形式:
入力は、5で終了しない正の奇数
x
(<1000)を1行に与える.出力フォーマット:
対応する最小
s
およびn
は、1行に1つのスペースで区切られて出力される.サンプルを入力:
31
出力サンプル:
3584229390681 15
#include
int main () {
int n, len = 0, p = 0, now = 1;
char ans[1001];
scanf("%d", &n);
while (++len ) {
if( p || now/n )
{ans[p++] = '0' + now/n;}//保存者、文字に変換
printf("%c",'0' + now/n) ;
now %= n;//余剰を取って、
if(now==0){//余数は0で、整除できることを説明します
ans[p] = '\0';//文字列終端を付ける
printf("%s %d", ans, len);
break;
}
now = now * 10 + 1;//1を追加
}
return 0;
}