printdigit打印小数的一个问题,递归(问题)
2016-03-24 11:30
239 查看
用递归打印小数,主要问题在于寻找小数的位数,首先解决小数和整数的分离;其次是小数的位数。
1.小数和整数的分离:
n是传进的double形参,num用强制转换获得整数部分,dic是获得小数部分。
但是dic是有问题的,因为3.45-3可能等于0.459999,而不是0.45。
2.小数的位数:
但是由于在小数和整数的分离部分会出现0.45999或者0.45这样的情况,这个函数不一定能求出正解。
所以目前的方法,是手动输入一个小数位数是多少。
1.小数和整数的分离:
<pre name="code" class="cpp">int num; double dic; num = int(n); dic = n - num;
n是传进的double形参,num用强制转换获得整数部分,dic是获得小数部分。
但是dic是有问题的,因为3.45-3可能等于0.459999,而不是0.45。
2.小数的位数:
int FindeIndex(double n) { int index = -1; do { n *= 10; index++; } while ((int(n) % 10) != 0); return index; }n获得的是dic,也就是0.xxx这样的数字。
但是由于在小数和整数的分离部分会出现0.45999或者0.45这样的情况,这个函数不一定能求出正解。
所以目前的方法,是手动输入一个小数位数是多少。
#include<iostream>大概就是这样,对于处理小数部分,我会后期在更新。
#include<math.h>
using std::cin;
using std::cout;
using std::endl;
void PrintOut(int n)
{
if (abs(n)>=10)
{
PrintOut(n / 10);
cout << (abs(n) % 10) << endl;
}
else
{
cout << (n % 10)<<endl;
}
}
//确定小数点位置
int FindeIndex(double n) { int index = -1; do { n *= 10; index++; } while ((int(n) % 10) != 0); return index; }
//打印小数部分
void printDouble(double n,int index)
{
int num;
double dic;
num = int(n);
dic = n - num;
//int index= FindeIndex(dic);
PrintOut(num);
if (index>0)
{
cout << "." << endl;
for (int i = 0; i < index; i++)
{
dic *= 10;
}
}
int dix = abs(dic);
PrintOut(dic);
}
int main()
{
/*cout << "输入正整数" << endl;
int testN;
cin >> testN;
PrintOut(testN);*/
cout << "输入正小数" << endl;
double test2;
int index;
cin >> test2;
cin >> index;
printDouble(test2,index);
system("pause");
return 0;
}
相关文章推荐
- 不用软件直接查询QQ好友的IP地址(一)
- leetcode_231_Power of Two(easy)(C++)
- windows学习记录之MFC通过URL上传下载文件
- 生产者/消费者问题的多种Java实现方式
- node.js web开发:EXPRESS 4.x 以上使用session和cookie 的记录 - lgphp
- JAVA8新特性
- java后台中判断PC端/手机web端访问,并返回相应页面
- C++第一次实验作业
- c++上机实验2
- c++第二次作业
- Solr DateRangeField
- jQuery之.html()和.text()区别
- Android根据字符串加载Activity和图片
- m3u8文件简介
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- iOS开发怎么样做第三方登陆(友盟社会化分享)
- 魔术师发牌问题
- Android Parcelable和Serializable区别
- 引言——Thinking-in-Java
- (java)华为机试题:大数求差