いやいや、
v = m * n;
for(int w=0;w<v;w++){
なんて、そんな話じゃないですよ。
だって、longとかlong longに収まる範囲でしかできない方法じゃダメなんですよ。
だからっていって、下手に再帰させるのもダメですよ。stackOverFlowもあるしね。
って、どんだけ大きな数を扱おうとしてるかって話でもなく、
ここでは、再帰よりも『美しく』codingしましょう。
ということで、やりかたはわからなかったのですが、
なんとなくcodingしてたら、案の定できました。
基本的には、タイガー計算機の如く、1ケタづつLOOPする変数を準備すればいいだけです。
まぁ制限としては、nもmもintの範囲っていうくらいの制限はありますが。^^;
で、できたのがこれ。
これなら、1000の1000乗のLOOPでもまわせます。そんなことしたら、おわりませんけど。
loopFuncが関数、countUpがサブの関数、theFuncsがテストなCallBack関数。
typedef int (*func1)(int*,int); int countUp(int* dat,int mmm,int nnn){ for(int w=0;w<nnn;w++){ dat[w]++; if(dat[w] < mmm){ return true; } dat[w] = 0; } return false; } int theFuncs(int* ip,int n){ static int counter = 0; printf("<%d> ",counter++); for(int w=n-1;w>=0;w--){ printf("[%d]",ip[w]); } printf("\n"); return 0; } void loppFunc(int mmm,int nnn,func1 f){ int* dat = new int[nnn]; memset(dat,0,sizeof(int)*nnn); do{ f(dat,nnn); }while( countUp(dat,mmm,nnn) ); delete[] dat; } loppFunc(10,3,theFuncs);//呼び出し方
ケタの数だけ、配列して、関数に渡します。←日本語おかしいな^^;^^;
まぁどんな言語でもいけるっちゃいけますけど、かなり用途は狭いでしょうし、、ホントに巨大な数だけLOOPするようなものを、C(C++)以外でつくることも、そうそうないでしょうし。
あ、すんません。Fortranとかは授業でしかやったことないんで^^;使ったことないっすー。。。
0 件のコメント:
コメントを投稿