HDU 2031 进制转换
这个题是数据结构教材上的一个经典例题,有两种方法,即数组或链表,这里我采用链表做的
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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