经典算法:X进制数转换为Y进制数

来源:互联网 发布:2016年中国老龄化数据 编辑:程序博客网 时间:2024/06/05 16:33

前言

 我们先看一个代码例子,这是十进制数转换为任意进制数的方法 void ARY(int num,int N){    int reminder;    if(num<N){cout<<num;return ;}    reminder = num%N;    ARY(num/N,N);   //通过递归方法来输出    cout<<reminder;}如果对此段代码不明白,请参照我一篇博客http://blog.csdn.net/qq_23100787/article/details/47446531

思路

  思路很简单,就是利用上述代码,把X转换为10进制数然后再把X转换为Y进制数,思路就是如此

代码

代码说明:
我用来处理输入的数用的是字符串而不是int型,因为字符串能够处理特别大的数
几个函数的作用:
select_cout() 用来把10,11,12等数转换为A,B,C,D,E,F
change(int num,int N) 把十进制数num转换为N进制数
NumToTen(char *s,int x) 把X进制数转换为十进制数

#include<iostream>#include <cmath>using namespace std;void select_cout(int num){ //用来把10,11,12等数转换为A,B,C,D,E,F    if(num>=0 &&num<=9) cout<<num;    if(num==10) cout<<"A";    if(num==11) cout<<"B";    if(num==12) cout<<"C";    if(num==13) cout<<"D";    if(num==14) cout<<"E";    if(num==15) cout<<"F";}void change(int num,int N){ //把十进制数num转换为N进制数    int reminder;    if(num<N){select_cout(num);return ;}    reminder = num%N;    change(num/N,N);    select_cout(reminder);}int NumToTen(char *s,int x){  //把X进制数转换为十进制数    int sum=0,count=0,temp=0;    char *p = s;    while(*p) {p++;count++;}    p--;    while(count){        sum+=(pow(x,temp)*(*p-'0')); //这里写的很精髓,看不懂来问我        p--;        count--;        temp++;    }    return sum; }int main(){    int x,y;    char num1[100];       cout<<"输入X进制和输入Y进制"<<endl;    cin>>x>>y;    cout<<"输入X进制对应的数1"<<endl;    cin>>num1;    change(NumToTen(num1,x),y); //直接一步得到结果,当然我是测试了很多遍的    cout<<endl;}

程序运行结果图

这里写图片描述
网上工具测试结果:

这里写图片描述

说明我的结果是对的

后序

进制转换写到这里应该就是终结版本了,因为暂时我就想不到什么更有意思的进制转换了,当然,我用的两个进制互相转换是利用了十进制作为桥梁的,如果哪位大神 想出来了或者是知道了两个进制直接转换的方法,欢迎来一起讨论~~~
seen
2015-09-07

0 0
原创粉丝点击