孤独の7

 結果の出力など、ちょっと改良してみました。(^_^;
実行時間の測定には、ネットでいい関数を見つけたので書き直しました。(^_^;

/* lonely7.c */
#include <stdio.h>
#include <string.h>
#include <time.h>

#define Horner(p,q,r,s,t) (10*(10*(10*(10*(p)+(q))+(r))+(s))+(t)) 
#define GetNum(x,n)	(((x)/(n))%10)	/* x の n の位の数を取り出すマクロ */

/* 桁数を求める関数 */
int check_keta(int x)
{
    char buf[32];
    sprintf(buf,"%d",x);
    return(strlen(buf));
}

int main(void)
{               /* Borland C++ ではintもlongも同じようです。(^_^; */
    int dvd;    /* 元の割られる数 dividend */
    int quo;    /* 商 quotient */
    int dvs;    /* 割る数 divisor */
    int rem;    /* 計算途中の余り remainder */
    int tmp;    /* 計算途中の割られる数 */

    int a,b,c=0,d;        /* 商の各桁 c=0は形から既知としました。(^_^; */
    clock_t start, end;
    char line[16][32];    /* 結果の出力用 少し多めに余裕をもって */
    int i;

    start=clock();        /* タイマースタート */

    for(dvs=100; dvs<200; dvs++){    /* 割る数の百の位は1 */
        for(a=1; a<10; a++){         /* 商の先頭は、0以外の数 */
            for(b=0; b<10; b++){
                for(d=0; d<10; d++){
                    /* quo=10000*a+1000*7+100*b+10*c+d; */
                    quo=Horner(a,7,b,c,d);
                    dvd=quo*dvs;
                    /* 消去法でスキップ */
                    if(check_keta(dvs*a)!=4) continue;
                    if(check_keta(dvs*7)!=3) continue;
                    if(check_keta(dvs*b)!=3) continue;
                    if(check_keta(dvs*d)!=4) continue;

                    tmp=dvd/10000;
                    rem=tmp%dvs;
                    if(check_keta(rem)!=2) continue;

                    tmp=rem*10+GetNum(dvd,1000);
                    sprintf(line[ 5],"      %d",tmp);
                    rem=tmp%dvs;
                    if(check_keta(rem)!=3) continue;

                    tmp=rem*10+GetNum(dvd,100);
                    sprintf(line[ 8],"      %d",tmp);
                    rem=tmp%dvs;
                    if(check_keta(rem)!=2) continue;
                    
                    tmp=rem*10+GetNum(dvd,10);
                    rem=tmp%dvs;
                    if(rem!=tmp) continue;
                    
                    tmp=rem*10+GetNum(dvd,1);
                    sprintf(line[11],"        %d",tmp);

                    /* チェックを潜り抜けたものだけを出力 */    
                    sprintf(line[ 0],"       %d",quo);
                    sprintf(line[ 1],"   ---------");
                    sprintf(line[ 2],"%d)%d",dvs,dvd);
                    sprintf(line[ 3],"    %d",dvs*a);
                    sprintf(line[ 4],"    -----");
                /*  sprintf(line[ 5],"      %d",tmp); */
                    sprintf(line[ 6],"      %d",dvs*7);
                    sprintf(line[ 7],"      ----");
                /*  sprintf(line[ 8],"      %d",tmp); */
                    sprintf(line[ 9],"       %d",dvs*b);
                    sprintf(line[10],"      ------");
                /*  sprintf(line[11],"        %d",tmp); */
                    sprintf(line[12],"        %d",dvs*d);
                    sprintf(line[13],"        ----");
                    sprintf(line[14],"           0");

                    for(i=0; i<15; i++)
                        printf("%s\n",line[i]);
                    printf("\n");
                }
            }
        }
    }
    end = clock();        /* タイマーストップ */
    printf("Runtime : %ld.%03ld [sec]\n",(end-start)/1000,(end-start)%1000);
    return(0);
}

●出力結果

       97809
   ---------
124)12128316
    1116
    -----
      968
      868
      ----
      1003
       992
      ------
        1116
        1116
        ----
           0

Runtime : 0.031 [sec]

※参考URL
http://q.hatena.ne.jp/1297128814
C言語 プログラム実行時からの時間を取得 - time.h - [ clock ] | 勇躍 ...
http://simd.jugem.jp/?eid=145
 Borland C++はこちらの付録について来たものを使いました。(^_^;