将十进制的转换为1~16(递归输出)或是1~32(字符串数组输出)进制

#include "stdafx.h"
#include <iostream>
#define SIZEMAX 50


using namespace std;


void myprintf(int n);
void Myitoa1(int num,int radix);
void myprintf1(int n,char str[],int i);
char* Myitoa2(int num,char str[],int radix);


int _tmain(int argc, _TCHAR* argv[])
{
int n;
char str[SIZEMAX];
char *p=NULL;
int radix;
printf("intput a num  n(n>0):\n");
cin>>n;
printf("intput a conversion num(n=2,8,16,32):\n");
cin>>radix;
cout<<"这个只能最大转换为16进制:\n";
Myitoa1(n,radix);
cout<<"\n";
cout<<"这个可以任意转换进制:\n";
p=Myitoa2(n,str,radix);
printf("%s\n",p);
return 0;
}




//将转换后的进制数存入字符数组输出
char *reverse1(char s[])
{
int i;
char tmp;
int len=strlen(s);
int xlen=len/2;
for(i=len-1;i>=xlen;i--)
{
tmp=s[i];
s[i]=s[len-i-1];
s[len-i-1]=tmp;
}
return s;
}
void myprintf1(int num,char str[],int i)
{
if(num<10)
{
str[i] = num + '0';
}
else 
{
str[i] = (num-10) + 'A';
}
}
char* Myitoa2(int num,char str[],int radix)
{
int i=0;
char *s=str;
do
    {
myprintf1(num%radix,str,i++);
    }while((num/=radix) > 0);


str[i]='\0';
reverse1(str);


return s;
}




//递归输出转换后的进制
void myprintf(int n)
{
switch(n)
{
case 10:  cout<<"A";
break;
case 11:  cout<<"B";
break;
case 12:  cout<<"C";
break;
case 13:  cout<<"D";
break;
case 14:  cout<<"E";
break;
case 15:  cout<<"F";
break;
default:  cout<<n;
break;
}
}
void Myitoa1(int num,int radix)
{
if(num<radix)
{
myprintf(num);
}
if(num>=radix)
{
Myitoa1(num/radix,radix);
myprintf(num%radix);
}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值