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;
}
本人还是新手 ,转载请注明来自Lvsi‘s home

浙公网安备 33010602011771号