おんjプログラミング部のwiki

プログラム

#include <stdio.h>
#include <limits.h>

#define MAX 256

/* スタック */
char stack[MAX];
int top = -1;

int stack_empty();
void push( char );
char pop();
void yen( long long int );
void print( long long int );

int main(void) {
	print( LLONG_MIN+1 );
	print( -123456789 );
	print( -1000000 );
	print( -1000 );
	print( -999 );
	print( 0 );
	print( 999 );
	print( 1000 );
	print( 1000000 );
	print( 123456789 );
	print( LLONG_MAX );
	
	return 0;
}

/* スタックが空の場合に真を返し, 空でない場合に偽を返す. */
int stack_empty(){
	return ( top < 0 ) ? 1 : 0;
}

/* 文字 c をスタックに入れる. */
void push( char c ){
	stack[ ++top ] = c;
}

/* スタックから文字を一つ取り出す. */
char pop(){
	return ( stack_empty() ) ? 0 : stack[ top-- ];
}

/* 非負整数 n を通貨書式で表示する. n ≧ 0. */
void yen( long long int n ){
	int i, len, cnt = 0;
	char array[MAX];
	
	/* 数値 n を文字列に変換する. */
	len = snprintf( array, MAX, "%lld", n );
	
	/* カンマを挿入しながら, スタックに数字を入れていく. */
	for( i = len-1; i >= 0; i-- ){
		if( cnt < 3 ){
			push( array[i] );
			cnt++;
		}else{
			push( ',' );
			push( array[i] );
			cnt = 1;
		}
	}
	
	/* スタックから数字を取り出していく. */
	while( !stack_empty() ){
		printf( "%c", pop() );
	}
}

/* 出力用関数 ( n : 整数 ) */
void print( long long int n ){
	printf( "%lld  ---->  ", n );
	if( n >= 0 ){
		yen( n );
	}else{
		printf( "-" );
		yen( -n );
	}
	printf( "\n" );
}

実行例

-9223372036854775807  ---->  -9,223,372,036,854,775,807
-123456789  ---->  -123,456,789
-1000000  ---->  -1,000,000
-1000  ---->  -1,000
-999  ---->  -999
0  ---->  0
999  ---->  999
1000  ---->  1,000
1000000  ---->  1,000,000
123456789  ---->  123,456,789
9223372036854775807  ---->  9,223,372,036,854,775,807

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

どなたでも編集できます