读书人

自己写的二进制计算程序有关问题在哪里

发布时间: 2012-03-09 16:54:58 作者: rapoo

自己写的二进制计算程序问题在哪里??
// 计算器
#include <iostream>
using std::cout;
using std::cin;

#include <cmath>
using std::pow;

double ten_t_two( double x )
{
double answer = 0 ;
double n = 9;
for( ; x > = 0; )
{
for( ; x < pow( 2, n ); n-- );
answer= answer + pow( 10, n );
x = x - pow( 2, n );
};
return answer;
}


main()
{
int ten;
cout < < "输入一个10进制数字: ";
cin > > ten;
cout < < ten_t_two( ten );

return 0;
}


错在哪里,能编译成功,估计是逻辑错误。请教~~~

[解决办法]
【参看一下这个转换吧,用字符串比较合适,否则容易溢出】
//任意 <=16的进制之间互相转换
//程序将 b1进制的s1数据 转换成 b2进制的s2,
//s2为输出结果...

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *convert(const char *from, int fbase, char *to, int tbase)
{
char *TAB= "0123456789ABCDEF ", *p, *q;
int i, base=1, decfrom=0, len=strlen(from);
for(i=len-1; i> =0; i--){
decfrom += base* (from[i] <65?from[i]- '0 ':from[i]- 'A '+10);
base*=fbase;
}
i=0; to[0]= '0 '; to[1]= '\0 ';
while(decfrom){
to[i++] = TAB[ decfrom%tbase ];
decfrom /= tbase;
}
p=to; q=&to[i-1]; to[i]= '\0 ';
while(p <q){
*p^=*q;
*q^=*p;
*p++^=*q--;
}
if(!*to) *to= '0 ';
return to;
}

int main( void )
{
char s1[100], s2[100];
int b1, b2;
while( scanf( "%s%d%d ", s1, &b1, &b2)!=EOF )
puts(convert(s1, b1, s2, b2));
return 0;
}
[解决办法]
d_to_b(n)
{
int a;
a=n%2;
if(n> 2)
d_to_b(n/2);
else
printf( "%d ",a);
}
就这么简单

读书人网 >C++

热点推荐