用递归打印小数,主要问题在于寻找小数的位数,首先解决小数和整数的分离;其次是小数的位数。
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;
}
大概就是这样,对于处理小数部分,我会后期在更新。