游艇会最新官方网站:编一个c程序:输入一个十进制数,可将该数转换成指定的进制数形式输出.

来源:百度文库 编辑:高校问答 时间:2024/05/14 08:55:32

10进制转换为2进制c++的实现

#include
#include
using namespace std;

void translate_integer_helper(double x, vector& r)
{
bool is_put_zero = false;
int i_part = static_cast(x);
for(int i = 0; i< sizeof(int)*8; i++)
{
if(i_part & 1<<(31-i))
{
is_put_zero = true;
r.push_back('1');
}
else
if(is_put_zero)
r.push_back('0');
}
if(r.size()==0) r.push_back('0');
}

void translate_decimal_helper(double x, vector& r)
{
r.push_back('.');
double f_part = x - static_cast(x);

while(!(-0.0001 <= f_part && f_part<= 0.0001))
{
f_part *= 2;
if(1 == int(f_part))
{
r.push_back('1');
f_part -= 1;

}
else
r.push_back('0');
}
}

void translate(double x, vector& r)
{
translate_integer_helper(x, r);
translate_decimal_helper(x, r);
}

void display(const vector& x)
{
bool is_display_zero = false;
for(vector::const_iterator iter = x.begin(); iter!=x.end(); ++iter)
{
if(*iter == '0' && is_display_zero == false) continue;
is_display_zero = true;
cout.put(*iter);
}
}
int main()
{
double a;
cout<<"请输入一十进制数:";
cin>>a;
vector rslt;
translate(a, rslt);
display(rslt);
cout<<"(该数所对应的二进制数)"< }

何必这么麻烦,直接调用printf设定不同的输出格式不就行了!

#include<stdio.h>
void main()
{
int i,j,num;
printf("请输入一个十进制数: ");
scanf("%d",&num);
j=num;
printf("二进制数为:\n");
printf("\t");
while(j!=0)
{
if(j%2==0) printf("0\b\b");
else printf("1\b\b");
j=j/2;
}
printf("\n");
printf("八进数为:%o\n ",num);
printf("十六进数为:%x\n ",num); }

其实二进制八进制和十六进制不用转换,直接调用不同的输出格式就行了,前面那位C++,汗……
我想你的意思是要任意进制吧,下面的程序最多转换到16进制
void digit(int src,int fmt) //src是输入的10进数,fmt是要转换的进制
{
char pos[16]={'0','1','2','3','4','5','6','7',
'8','9','A','B','C','D','E','F'};
int que[32]; //最大转换2^32-1的数
int top = 0;
if (fmt<2) //确保进制大于2
{
printf("Error!\n");
return;
}
while(src)
{
que[top++] = src%fmt;
src /= fmt;
}
while(top)
{
printf("%c",pos[que[--top]]);
}
printf("\n");
return;
}

最后在main函数中调用digit(int a,int fmt)函数即可。

#include<stdio.h>
void main()
{
int i,j,num;
printf("请输入一个十进制数: ");
scanf("%d",&num);
j=num;
printf("二进制数为:\n");
printf("\t");
while(j!=0)
{
if(j%2==0) printf("0\b\b");
else printf("1\b\b");
j=j/2;
}
printf("\n");
printf("八进数为:%o\n ",num);
printf("十六进数为:%x\n ",num); }