昨天拿到一个题,把任意一个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; }
发表评论 (对文章评论)