我的编程学习日志(1)--进制转换

昨天拿到一个题,把任意一个int型的十进制数n转换为m(0<m<=32)进制。

 

既然没有小数思路就很简单了,只需要把n除以m取余数,记录每个余数,最后把余数反序输出(如图)。

下面就来分步实现它。

 (注:这并不算最简单的实现过程)

首先n/m取余,并用一个数组来存储余数:

<pre class="cpp" name="code">int yu[100];
int n,m,i;
i=0;
cin>>n;
cin>>m;
while(n)
{	yu[i]=n%m;
	n=n/m;
	i++;
}




 然后是反序输出:

for(i=i-1;i>=0;i--)
{
	cout<<yu[i];
}
cout<<endl;

 

(这里存储加反序输出,我首先想到的是用链表,但题目已经说明n是int型,所以用来存储余数的数组[100]已经够用了,不会造成太大的空间浪费,用链表就得不偿失了。)

 

因为超过11的数要用字母来表示,所以输出时还要加这个判断:

if(yu[i]>10)
{
yu[i]=yu[i]+55;
cout<<(char)yu[i];
}
else
cout<<yu[i];


这样就完成了一个十进制转其他进制的程序。

 

完整的代码如下:

#include<iostream>
using namespace std;

int main()
{
	int n,m,i;
	int yu[100];
	i=0;
	cin>>n;
	cin>>m;
	while(n)
	{
		yu[i]=n%m;
		n=n/m;
		i++;
	}
	for(i=i-1;i>=0;i--)
	{
		if(yu[i]>10)
		{
			yu[i]=yu[i]+55;
			cout<<(char)yu[i];
		}
		else
			cout<<yu[i];
	}
	cout<<endl;
	return 0;
}


 

 

发布了26 篇原创文章 · 获赞 2 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章