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

用递归打印小数,主要问题在于寻找小数的位数,首先解决小数和整数的分离;其次是小数的位数。

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;
}
大概就是这样,对于处理小数部分,我会后期在更新。

猜你喜欢

转载自blog.csdn.net/sinat_14884161/article/details/50970277