码迷,mamicode.com
首页 > 其他好文 > 详细

任意的进制转换

时间:2014-05-09 01:53:44      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:算法   acm   

进制转换我们经常遇到。

遇到这么好模板就抓紧写一下记住吧,虽然不难。

以后博客都来写个思路吧,记录点滴。

进制转换。

1,我们来输入要转换的数字,和这个数字的进制,还有将要转换的进制。

2,因为是任意进制的,我们就同一的转化为10进制的,然后从10进制再转化为我们想要的进制。

2.1 就是转化为10进制的时候:我们先来处理输入的数字(因为是字符类型的,转化为直接能操作的数字,这里是用了阿斯科码与int相应转换,这是c语言基础知识),然后我们将其用转化为10进制 sum 从头开始 挨个来, 别忘了*进制;

2.2就是将这个10进制的数转换为我们想要的进制数了,就是每次除进制取余用数组来存放,直到取到被除数为0 为止。注意在数组中我们存放的顺序是反的,我们需要将数组来倒置。这样我们的想要的结果就出来了。

(注意因为进制16等这些大的进制,所以会出现ABC等这些字母,我们在输入输出转换的时候都要考虑到,需要处理的)

下面贴出代码:

#include<iostream>
using namespace std;
//进制处理任一进制的转换
void convirsion( char *a ,char* b,int x,int y )
{
	__int64 sum=0 ;
	for(int i=0;i<a[i]!=‘\0‘;i++)
	{
		if(a[i]>=‘0‘&&a[i]<=‘9‘)
			sum = sum*x+(a[i]-‘0‘);
		else 
			sum=sum*x+(a[i]-‘A‘+10);
	}
	int k=0;
	while(sum)
	{
		int t = sum%y;
		if(t>9)
			b[k++]=t-10+‘A‘;
		else
			b[k++]=t+‘0‘;
		sum/=y;
	}
	for(int i=0;i<k/2;i++)
	{
		int t = b[i];
		b[i]=b[k-1-i];
		b[k-1-i] = t;
	}
	for(int i=0;i<k;i++)
	{
		cout<<b[i];
	}
	cout<<endl;
}
int main()
{
	char a[50],b[50];
	int x,y;
	while(1)
	{
		cin>>a>>x>>y;
		convirsion(a,b,x,y);
	}
}

好了。

感谢自己坚持。

任意的进制转换,布布扣,bubuko.com

任意的进制转换

标签:算法   acm   

原文地址:http://blog.csdn.net/u010123208/article/details/25304969

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!