算法——任意进制转换

// s: 转换前数字,字符串形式,表示的数字大小不能超过num范围
// num用字符表示没有实现,那样就可以无限制位数了 
// s2:转换后数字,字符串形式 
// d1: 原进制数
// d2: 需要转换的进制数
// 大于9的位数用大写'A'~'Z'表示,2~16进制通过验证 

// 如果输入进制为整形,要注意各种不同点 

#include<stdio.h>
void conversion(char s[],char s2[],long d1,long d2);
int main()
{ 
char s[]="23456";
char s2[30];
int i=0;
conversion(s,s2,10,2);
while(*(s2+i))
{
printf("%c",*(s2+i));
i++;
}
return 0;
} 
void conversion(char s[],char s2[],long d1,long d2)
{
int i,j,t;
long num=0;
char c;
for(i=0;s[i]!='\0';i++)//把字符串表示转化为整数类型数字
{
if(s[i]<='9'&&s[i]>='0')
t=s[i]-'0';
else
t=s[i]-'A'+10;
num=num*d1+t;
//字符串表示的数字超过long表示的范围,就会出错。可以联系大数相乘的问题
}
i=0;
while(1)
{
t=num%d2;
if(t<=9&&t>=0)
s2[i]=t+'0';
else
s2[i]=t+'A'-10;
num/=d2;
if(num==0)
break;
i++;//此处要注意i最终值大小
}
for(j=0;j<=i/2;j++)//调换高低位置
{
c=s2[j];s2[j]=s2[i-j];s2[i-j]=c;
}
s2[i+1]='\0';
} 

by  吴尚奇  Devil_box  2014/06

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值