基数変換とgomiarashi.c
久々にプログラミング関連のことを。
こないだ出た課題で、「基数変換をせよ」というのがあってそれの組んでみた感じがこれ。
基数変換
#include<stdio.h> #include<string.h> #include<math.h> int decimal( int base , char *num ) { int length = strlen( num ); int trans = 0; int i; int tmp = 0; for( i = 0; i < length; i++ ) { if( 'a' <= num[ length - ( i + 1 ) ] && num[ length - ( i + 1 ) ] <= 'z' ) { tmp = 10 + ( num[ length - ( i + 1 ) ] - 'a' ); } else if( 'A' <= num[ length - ( i + 1 ) ] && num[ length - ( i + 1 ) ] <= 'Z' ) { tmp = 10 + ( num[ length - ( i + 1 ) ] - 'A' ); } else if( '0' <= num[ length - ( i + 1 ) ] && num[ length - ( i + 1 ) ] <= '9' ) { tmp = ( num[ length - ( i + 1 ) ] - '0' ); } trans += tmp * (int)pow( base , i ); tmp = 0; } return trans; } void conv( int base , int dec , char *result ) { char num[100] = { '\0' }; int tmp; int i; int length; for( i = 0; dec > 0; i++ ) { tmp = dec % base; if( 9 < tmp ) { num[i] = 'A' + ( tmp - 10 ); } else if( tmp < 10 ) { num[i] = '0' + tmp; } dec = dec / base; } num[i] = dec % base; length = strlen( num ); for( i = 0; i < length; i++ ) { result[i] = num[ length - ( i + 1 ) ]; } } int main( void ) { int x; int befor; int after; char num[100]; char result[100] = { '\0' }; printf("2進数、8進数、10進数、16進数の相互変換を行います\n"); printf("入力する数の基数:"); scanf("%d" , &befor ); printf("変換対象の数値を入力:"); scanf("%s" , num ); x = decimal( befor , num ); printf("出力する数の基数:"); scanf("%d" , &after ); conv( after , x , result ); printf("%d進数に変換すると\n" , after ); printf("%s\n" , result ); return 0; }
コメントが全くありません。悪い例。
要は、入力された数を10進数に変換して、それをさらになんちゃら進数に直すという動作。入力は英大文字小文字問わず16進数以上も大丈夫。出力は16進数まで。
コメントが欲しかったら言ってください。死ぬまでには書きます。
おまけ
nikuzuki氏の書いたgomiarashi.cを本人の許可を得て掲載します。
#include<stdio.h> int main(){ int x; int i; do{ printf("1:グー 2:チョキ 3:パー\n"); do{ scanf("%d",&x); }while(x<1 && x>3); if(x==1)printf("私はパーを出しましたwww\n"); else if(x==2)("私はグーを出しましたwww\n"); else printf("私はチョキを出しましたwww\n"); for(x=0;x<=100;++x)printf("アナタのぉ・・・・・負けでーーーーすWWWWWWWWういーーーーWWWWWWW(^_^;)"); for(i=0; ;i++){ printf("☆彡☆彡☆彡☆彡"); } }while(1); return 0; }