历届试题 小数第n位 【C++】

问题描述
  我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。
  如果我们把有限小数的末尾加上无限多个0,它们就有了统一的形式。


  本题的任务是:在上面的约定下,求整数除法小数点后的第n位开始的3位数。
输入格式
  一行三个整数:a b n,用空格分开。a是被除数,b是除数,n是所求的小数后位置(0
输出格式
  一行3位数字,表示:a除以b,小数后第n位开始的3位数字。
样例输入
1 8 1
样例输出
125
样例输入
1 8 3
样例输出
500
样例输入
282866 999000 6
样例输出

914


代码如下:
#include
using namespace std;
int main()
{
	long long a,b,n;
	long long sa,sn,count;
	while(cin>>a>>b>>n)
	{
		sn = n;
		sa = a % b;    // 此时的sa*10对b取余后得到小数点后第一位 
		count = 0;
		while(sn--)
		{
			if(sa == b)  //取余之后会等于零 
				break;
			if(sa < b)
			{
				sa = sa * 10;
			}
			else
			{
				//除法法则,逐步运算 
				sa = sa % b;
				sa = sa * 10;
				if(!sa)
					break;  //后面都是零则直接跳出循环 
				
			}
			count++;
			if(sa % b == a % b) // 减掉循环的数 
			{
				sn = n % count;
			}
		}
		if(!sa)
		{
			cout<<"000";
		}
		else
		{
			int i = 3;
			while(i--)
			{
				cout << sa / b; //逐步输出n后三位的每一位 
				sa = sa % b;
				sa = sa * 10;
			}
		}
	}
	return 0;
}


你可能感兴趣的:(蓝桥杯练习)