c++算法问题,关于数据之间的置换

newric 发布于 2014/02/07 13:13
阅读 1K+
收藏 1
c++

我想写一个函数   double  fun(double n);

要让传进去的n变成相反的值输出,比如n是12.34,函数返回43.21,

比如123.456就变成654.321。。。。。。以此类推

请问各位该怎么实现这个函数啊,我先谢谢大家了

加载中
0
antipro
antipro
#include <sstream>
#include <iostream>
#include <string>

using namespace std;

/**
 *	倒转数值
 */
double reverseDouble(double d)
{
	stringstream ss;
	ss << d;
	string str, r_str;
	ss >> str;
	int len = str.length();
	for(int i = len - 1; i >= 0; i--)
		r_str.push_back(str[i]);

	ss.clear();
	ss << r_str;
	ss >> d;
	return d;
}

template<typename T> T reverse(T t){
	stringstream ss;
	ss << t;
	string str, r_str;
	ss >> str;

	int len = str.length();
	for(int i = len - 1; i >= 0; i--)
		r_str.push_back(str[i]);

	ss.clear();
	ss << r_str;
	ss >> t;
	return t;
}

int main()
{
	double d = 3.14159;
	cout << d << endl;
	double r_d = reverseDouble(d);
    cout << r_d << endl;

	cout << reverse(33.5f) << endl;
    return 0;
}

我再修改了一下,不再使用strtod这个C函数,全部用C++,此外还加了一个泛型的版本。


0
中山野鬼
中山野鬼
哈,精度是怎么确定的呢。这个和c++没什么关系。
newric
newric
我不是很懂额。只要保证小数点前后15位的逆转不要有变差。哈。
中山野鬼
中山野鬼
回复 @Lance_Ric : 浮点不是定点。哈。即便是n多个0,跑到最后冒个1也很正常,这样对你逆转后的整数会有很大的数值差。
newric
newric
我也不太懂这个精度位宽,只要函数能像我举的例子那样运行就好啦,不用特别特别精准
newric
newric
就15位把
newric
newric
精度为15~16位
下一页
0
jQer
jQer

简单的方法用反序, 转成字符串排出来,再转回double.

至于用二进制,这个符合排列规则吗?

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部