历届试题 小数第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
代码如下:
如果我们把有限小数的末尾加上无限多个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; }
相关文章推荐
- 历届试题 小数第n位 蓝桥杯
- 历届试题 小数第n位
- 历届蓝桥杯C/C++省赛试题
- 历届试题 合根植物 c++
- 历届蓝桥杯C/C++省赛试题
- 历届试题 核桃的数量 【C++】
- 历届蓝桥杯C/C++决赛试题
- 历届试题 Excel地址 [C++]
- 历届蓝桥杯C/C++省赛试题
- 历届蓝桥杯C/C++省赛试题
- 蓝桥杯 历届试题 带分数
- 历届试题 分糖果
- 蓝桥杯 历届试题 剪格子(dfs搜索)
- 算法笔记_180:历届试题 国王的烦恼(Java)
- c++中获取小数点后面小数的方法
- 历届试题 分糖果
- C++与C的保留小数
- 【蓝桥杯】历届试题 公式求值
- 【蓝桥杯】历届试题 波动数列(运行超时)
- 蓝桥杯 历届试题 K倍区间数(C语言)