您的位置:首页 > 其它

printdigit打印小数的一个问题,递归(问题)

2016-03-24 11:30 239 查看
用递归打印小数,主要问题在于寻找小数的位数,首先解决小数和整数的分离;其次是小数的位数。

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;
}
大概就是这样,对于处理小数部分,我会后期在更新。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: