Localhost8080

知行合一,自强不息

 

任意进制转换

题目描述:
编写一个NumConvert函数,要求声明为int NumConvert(int n, int k);
功能是把传入的参数n按照k进制进行转换并输出结果
输入:
按参数传递,2<=k<=36,n在int的范围内
输出:
按参数通过标准输出,输出相应的结果
输出的结果应当不包含换行
如果超出10,应当用大写字母依次表示
函数执行成功则应当返回0值
样例输入:
2 2
9 4
31 16
样例输出:
10
21
1F

#include<iostream>      
  
using namespace std;      
  
int NumConvert(int n,int k)      
{      
    
long long t = n;      
    
if(k < 2 || k > 36return -1;      
    
if(t == 0)      
    
{      
        printf(
"0");      
        
return 0;      
    }
      
    
if(t < 0)      
        printf(
"-"), t = -t;      
    
char buf[100];      
    
int i,j;      
    
for(i=0;i<100 && t>0;i++,t/=k)      
    
{      
        j 
= t % k;      
        
if(j < 10)    
            buf[i] 
= '0'+j;      
        
else    
            buf[i] 
= 'A'-10+j;      
    }
      
    
for(;i>0;)   
        printf(
"%c\n",buf[--i]);      
    
return 0;      
}
     
  
  
int main(void)   
{   
    
int n,k;   
    
while(cin>>n>>k)   
        NumConvert(n,k) ;   
    
return 0;   
}


实现2
#include <stdio.h>   
int NumConvert(int num,int k)   
{   
    
long long z=num;   
    
if(z==0)   
    
{   
        putchar(
'0');   
        
return 0;   
    }
   
    
else if(z<0)   
    
{   
        putchar(
'-');   
        z
=-z;   
    }
   
    
static const int N=100;   
    
char stack[N];   
    stack[N
-1]=0;   
    
int at=N-2;   
    
while(z)   
    
{   
        
int u=z%k;   
        z
/=k;   
        
if(u<10)stack[at--]='0'+u;   
        
else stack[at--]='A'+u-10;   
    }
   
    printf(stack
+at+1);   
    
return 0;   
}

posted on 2010-05-27 20:51 superKiki 阅读(833) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿

随笔档案

文章分类

我的好友

一些常去的网站

搜索

最新评论

阅读排行榜

评论排行榜