PAT 7-42 C言語練習問題


7-42独身者の除去(20点)
ここでいう「独身ワンマン」とは、独身ワンマンとか~すべてが1からなる数字、例えば1、11、111、1111などを指すわけではありません.どの独身者も5で終わらない奇数で除けるという伝説がある.例えば、111111は13で除去することができる.今、あなたのプログラムは整数xを読み込みます.この整数は奇数で、5で終わりません.そして、計算により、2つの数字が出力される.1番目の数字はsであり、xsを乗じたものが光棒であり、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;  
}