最終更新:ID:Dir7WYlB/g 2017年06月06日(火) 21:38:09履歴
#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" ); }
コメントをかく