循環小数表示
この時期、春だなぁと思うのは「~なプログラム教えてください」とか言う
学生さんの書き込み。
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; }
トラックバック URL : http://nyanyan.to/archives/269/trackback
コメント (0)