| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 532 人关注过本帖
标题:怎么将十进制转换为不常用的其他进制啊
只看楼主 加入收藏
a99875984
Rank: 2
等 级:论坛游民
帖 子:188
专家分:24
注 册:2012-2-11
结帖率:94.64%
收藏
已结贴  问题点数:20 回复次数:6 
怎么将十进制转换为不常用的其他进制啊
程序代码:
#include <iostream>
#include <stdlib.h>
//#include "transition.h"
//using namespace std;
//#include <iostream>
#include <cmath>
using namespace std;
class transition
{
private:
    double oldNum;//待转换的数
    double newNum;//转换后的数
    int newBase;//带转换的数的进制
    int oldBase;//转换成的进制数
public:
    transition(double a,int b,int c);
    //~transition();
    int calculate(transition &a);//判断是几进制转换成几进制,在调用相应的函数
    void ten_other(transition &a);//十进制转换为其他进制
    void other_ten(transition &a);//其他进制转换为十进制
    void output(transition &a);//输出
};

transition::transition(double a,int b,int c)
{
    oldNum=a;
    newBase=b;
    oldBase=c;
    newNum=0;
}

int transition::calculate(transition &a)
{
    if(a.oldBase<0&&a.newBase<0)
    {
        cout<<"进制位错误"<<endl;
        exit(0);
    }
    else if(a.oldBase!=10)
    {
        if(a.newBase!=10)
            return 0;//其他进制转换其它进制
        return 2;//其他进制转换为10进制
    }
    else
    {
        return 1;//十进制转换为其他进制
    }
}

void transition::ten_other( transition &a)
{
    if(a.newNum==0)//直接由十进制转换为其他进制
    {
        int i;//i为整数位的原数
        double k;//k为非整数位的
        i=(int)a.oldNum;
        k=a.oldNum-i;
        int l=1;
        while (k)
        {
            k*=a.newBase;
            a.newNum+=(int)k/pow(10.0,l);
            k=k-(int)k;
            l++;
        }
        l=0;
        while(i)
        {
            a.newNum+=(i%a.newBase)*pow(10.0,l);
            i/=a.newBase;
            l++;
        }
    }
    else //由其他进制转换为其他进制,先通过ten_other函数转换为十进制,再通过这转换
    {
        double c;
        c=a.newNum;
        a.newNum=0;
        int i;//i为整数位的原数
        double k;//k为非整数位的
        i=(int)c;
        k=c-i;
        int l=1;
        while (k)
        {
            k*=a.newBase;
            a.newNum+=(int)k/pow(10.0,l);
            k=k-(int)k;
            cout<<'1'<<endl;
            l++;
        }
        l=0;
        while(i)
        {
            a.newNum+=(i%a.newBase)*pow(10.0,l);
            i/=a.newBase;
            l++;
        }
    }
}

void transition::other_ten(transition &a)
{
    double c;
    c=a.oldNum;
    a.newNum=0;
    int i;//i为整数位的原数
    double k;//k为非整数位的
    i=(int)c;
    k=c-i;
    int l=1;
   
    while(k)
    {
        k=k*10;
        a.newNum+=(int)k/pow((double)a.oldBase,l);
        k=k-(int)k;
        l++;
    }
    l=0;
    while(i)
    {
        a.newNum+=i%10*pow((double)a.oldBase,l);
        i/=10;
        l++;
    }
   
}

void transition::output(transition &a)
{
    cout<<a.oldBase<<"进制数"<<a.oldNum<<"转换为"<<a.newBase<<"进制数后为"<<a.newNum<<endl;
}

void fun(transition &a)
{
    int i;
    i=a.calculate(a);
    if(i==0)//其他进制位转换为其他进制位
    {
        a.other_ten(a);
        a.ten_other(a);
        a.output(a);
    }
    else if(i==1)//十进制转换为其他进制
    {
        a.ten_other(a);
        a.output(a);
    }
    else if(i==2)
    {
        a.other_ten(a);
        a.output(a);
    }
}

int main()
{
    double oldNum;
    int newBase;
    int oldBase;
    cout<<"请输入待转换的数的进制数"<<endl;
    cin>>oldBase;
    cout<<"请输入待转换的数"<<endl;
    cin>>oldNum;
    cout<<"请输入转换后的数的进制数"<<endl;
    cin>>newBase;
    transition a(oldNum,newBase,oldBase);
    fun(a);
    cin.get();
    return 0;
}
我用这种算法的时候,假如输入的是
10
.5
9
就就会因为尾数一直是.5而陷入死循环啊,这怎么破啊,谢谢了

[ 本帖最后由 a99875984 于 2013-4-2 14:38 编辑 ]
搜索更多相关主题的帖子: transition include 十进制 
2013-04-01 23:38
Pirelo
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:118
专家分:550
注 册:2011-1-28
收藏
得分:5 
断点+单步调试
2013-04-02 09:15
a99875984
Rank: 2
等 级:论坛游民
帖 子:188
专家分:24
注 册:2012-2-11
收藏
得分:0 
回复 2楼 Pirelo
谢谢了,已经试出来了,但现在又发现算法有问题,如果让他转换成9进制并且带小数的话就会因为不可能让小数位为0而陷入死循环,其他进制还没试。
2013-04-02 14:42
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:15 
以下是引用a99875984在2013-4-2 14:42:01的发言:

谢谢了,已经试出来了,但现在又发现算法有问题,如果让他转换成9进制并且带小数的话就会因为不可能让小数位为0而陷入死循环,其他进制还没试。

死循环是正常的

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-04-02 14:59
a99875984
Rank: 2
等 级:论坛游民
帖 子:188
专家分:24
注 册:2012-2-11
收藏
得分:0 
回复 4楼 peach5460
我也知道死循环的原因了,但我不知道要怎么改进算法啊,难道木有办法让其他进制的转换成3的n次方进制吗?
2013-04-02 15:09
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
算法再怎么改进也是个死循环呀...
你最多可以控制一下精度...

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-04-02 15:28
a99875984
Rank: 2
等 级:论坛游民
帖 子:188
专家分:24
注 册:2012-2-11
收藏
得分:0 
回复 6楼 peach5460
额,我明白了,谢谢了哈
2013-04-02 15:40
快速回复:怎么将十进制转换为不常用的其他进制啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035104 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved