2007/4/17 火曜日

循環小数表示

カテゴリー: 未分類 — ryu @ 21:34:07

この時期、春だなぁと思うのは「~なプログラム教えてください」とか言う
学生さんの書き込み。

greeで見かけたトピ

1/nの循環小数を表示するプログラムをつくるという今日中に課題

まぁ、ねー(笑

学校らしい課題だなぁと思いつつもこの手の課題って制約が少ないから、
ピンからキリまで色々書けるよなぁ。

ざくっと書いてみてこんな感じか。
nの値によってはメモリバカ食いするのが行けてない。

確か循環する桁数は公式で求められるはずなので、
そのへん知ってればがらっと変わるんだろうなぁ。

表示用にバッファは持たず一旦表示位置を計算してから再度表示という
ちょっとややこしい方法にしてみた。

#include <stdio.h> #include <stdlib.h> #include <memory.h> #include <limits.h> int func( int p, int saved ){ int m = 1; int n = 0; int lp = 0; char *buffer = (char *)malloc( 2 * p ); memset( buffer, 0, sizeof(char) * p ); for(lp = 0; lp < INT_MAX; lp++){ n = (int)(m/p); m = (m % p); if( saved != 0 ){ printf("%d", n); if( lp == 0) printf("."); if( m == saved ) printf("'"); } if( ++(buffer[ m ]) == 2 ){ break; } if( m == 0 ) break; m = m * 10; } free( buffer ); return m; } int main( int argc, char *argv[] ){ int p = 0; int n = 0; int m = 1; int saved = 0; if( argc < 2 ){ printf( "usage: %s arg\n", argv[0] ); } else { p = atoi( argv[1] ); saved = func( p, 0 ); if(saved != 0){ func( p, saved ); } else { printf( "循環していない" ); } printf( "\n" ); } return 1; }

コメントはまだありません

コメントはまだありません。

このコメント欄の RSS フィード トラックバック URL

コメントフォームは現在閉鎖中です。

37 queries. HTML convert time: 0.291 sec. Powered by WordPress 2.8