注册 登录
编程论坛 C++教室

十进制变换二进制

zhumingyuan 发布于 2011-02-20 21:06, 825 次点击
#include<iostream>
#include<cmath>
using namespace std;
int huan(int,int);
int main()
{
  int n;
  cin >> n;
  while(n--)
  {
    int a;
    cin >> a;
    a++;
    int sum=0;
    cout << huan(a,sum) << endl;
  }
  return 0;
}
int huan(int m,int sum)
{

  if(m==0) return sum;


    for(int i=0;i<33;i++)
    {
     if(m<=pow(2,i))
     {
      m=m-pow(2,i-1);
      sum+=pow(10,i-1);
      huan(m,sum);
      break;
     }
    }
  }

怎样把内存变小点?
6 回复
#2
lucky5635912011-02-21 07:49
太复杂了,我有更简便的算法
#3
zhumingyuan2011-02-21 11:05
能否借鉴一下 ?  谢谢了!
#4
闭眼到天黑2011-02-23 12:47
程序代码:
#include<iostream>
#include<vector>
using namespace std;
int change(const int &a,const int &b)
{   
    static int d=1;
    int e,g;
    e=a;
    g=b;

    if(g<=1||g>16)
    {
        cout<<"请确认您所输入的数字是否正确!\n"<<endl;
    }
    else
    {
    vector<int> vec;
    do
    {
        vec.push_back(e%g);
        e=e/g;
    }
    while(e!=0);

    cout<<"converted number:"<<endl;

    for(int j=vec.size()-1;j>=0;--j)
    {
        switch(vec[j])
        {
        case 10:
            cout<<'A';
            break;
        case 11:
            cout<<'B';
            break;
        case 12:
            cout<<'C';
            break;
        case 13:
            cout<<'D';
            break;
        case 14:
            cout<<'E';
            break;
        case 15:
            cout<<'F';
            break;
        default:
            cout<<vec[j];
        }
    }
    cout<<"\n程序运行次数:\n"<<d++<<endl;
    }
    return 0;
}
int main()
{
    int a,b;
    for(;;)
    {
    cout<<"请输入您想转换的数:\n";
    cin>>a;
    cout<<"请输入您想转换的进制(大于1小于等于16):\n";
    cin>>b;
    change(a,b);
    }
    return 0;
}
我写的1到16之间任意进制的转换程序,你看一下!以前写的时候错了一点,现在好了!

[ 本帖最后由 闭眼到天黑 于 2011-3-2 13:23 编辑 ]
#5
florajun2011-02-23 13:11
回复 4楼 闭眼到天黑
你好,这个程序好像实现不了任意进制的转换吧 !
#6
yu6052011-02-23 21:55
确实不能任意进制转换,只能指定转换的制位
#7
闭眼到天黑2011-03-02 13:24
回复 5楼 florajun
这是一个转换进制的算法而已!
1