您的位置:首页 > 编程语言 > C语言/C++

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

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

  本题的任务是:在上面的约定下,求整数除法小数点后的第n位开始的3位数。输入格式  一行三个整数:a b n,用空格分开。a是被除数,b是除数,n是所求的小数后位置(0<a,b,n<1000000000)输出格式  一行3位数字,表示:a除以b,小数后第n位开始的3位数字。样例输入1 8 1样例输出125样例输入1 8 3样例输出500样例输入282866 999000 6样例输出914
代码如下:
#include<iostream>
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  蓝桥杯练习