帮忙看看这段代码/*十进制转成二进制 *分别对整数和小数部分转化再合并 */ #includeiostream#includest
帮忙看看这段代码
/*十进制转成二进制
*分别对整数和小数部分转化再合并
*/
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string return_int(int origin)//对整数部分转成二进制
{
string goal;
int remain;
while(origin!=0)
{
remain=origin%2;
origin/=2;
goal+=to_string(remain);
}
reverse(goal.begin(),goal.end());//反转
return goal;
}
string return_double(double origin)//对小数部分转成二进制
{
int temp;
double flag;
string goal;
while(origin>1e-6)
{
flag=2*origin;
if(static_cast<int>(flag)==0)
temp=0;
else
{
temp=1;
origin=flag-1.0;
}
goal+=to_string(temp);
}
return goal;
}
int main()
{
cout<<return_int(10);
cout<<return_double(0.34);
system("pause");
return 0;
}
整数转成二进制输出结果正确,小数部分出错。单步调试时,竟然整数部分却每次都是字符串出错,但仅仅运行整数部分,return0。感觉有些无语。。求指点!!
[解决办法]
/*十进制转成二进制
*分别对整数和小数部分转化再合并
*/
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
char to_string(int d)
{
return d + '0';
}
string return_int(int origin)//对整数部分转成二进制
{
string goal;
int remain;
while(origin!=0)
{
remain=origin%2;
origin/=2;
goal+=to_string(remain);
}
reverse(goal.begin(),goal.end());//反转
return goal;
}
string return_double(double origin)//对小数部分转成二进制
{
int temp;
string goal;
while(origin>1e-6)
{
origin *= 2;
if(origin >= 1)
{
temp = 1;
origin -= 1;
}
else
{
temp = 0;
}
goal+=to_string(temp);
}
return goal;
}
int main()
{
cout<<return_int(10)<<endl;
cout<<return_double(0.8125)<<endl;
//system("pause");
return 0;
}
[解决办法]
应该设计成可以自己输入数字验证的比较好吧
[解决办法]
return_double函数的逻辑有问题。
仔细看1楼代码的return_double的函数体部分。看看自己的和1楼给出的代码有什么不同?
