LeeBlog

导航

HDU 2031 进制转换

这个题是数据结构教材上的一个经典例题,有两种方法,即数组或链表,这里我采用链表做的

代码
#include <stdio.h>
#include
<stdlib.h>
typedef
char Elemtype;
typedef
struct Lnode
{
Elemtype e;
struct Lnode *next;
}Ln,
*Link;
void change ( Link L,int n,int r )
{
Link s;
L
-> next = NULL;//必须的,否则上一次的数据下一次还保留着
if ( n < 0 )
{
L
-> e = 0;
n
= -n;
}
else
L
-> e = 1;
while ( n )
{
s
= ( Link ) malloc ( sizeof ( Ln ) );
s
-> next = L -> next;
L
-> next = s;
s
-> e = n % r ;
n
= n / r;
switch ( s -> e )
{
case 10:
s
-> e = 'A';
break;
case 11:
s
-> e = 'B';
break;
case 12:
s
-> e = 'C';
break;
case 13:
s
-> e = 'D';
break;
case 14:
s
-> e = 'E';
break;
case 15:
s
-> e = 'F';
break;
default:
s
-> e += '0';
}
}
}
void print ( Link L )
{
Link p
= L -> next;
if ( !L -> e )
printf (
"-" );
while ( p )
{
printf (
"%c",p -> e );
p
= p -> next;
}
puts (
"" );
}
int main ( )
{
int N,R;
while ( scanf ( "%d%d",&N,&R ) == 2 )
{
Link L;
L
= ( Link ) malloc ( sizeof ( Ln ) );
change ( L,N,R );
print ( L );
free ( L );
}
return 0;
}

下面是递归实现的算法

#include<stdio.h>
#include<string.h>
int n,num[15],r,count;
void print( int x )
{
     if( x <= 9 )
         printf( "%d",x );
     else
         printf( "%c",x - 10 + 'A' );
 }
void change( int n,int r )
{
     if( n )
     {
         change( n / r, r );
         print( n % r );
     }
 }
int main( )
{
    while( scanf( "%d%d",&n,&r ) != EOF )
    {
           if( n < 0 )
               printf( "-" ),n = -n;
           change( n,r ),puts( "" );
           }
    return 0;
}

posted on 2011-01-27 15:52  LeeBlog  阅读(524)  评论(0编辑  收藏  举报