基数変換と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;
}