【模拟】 蓝桥杯试题 小数第n位

题目描述

OJ地址 http://lx.lanqiao.cn/problem.page?gpid=T456

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

本题的任务是:在上面的约定下,求整数除法小数点后的第n位开始的3位数。

输入:

一行三个整数:a b n,用空格分开。a是被除数,b是除数,n是所求的小数后位置(0<a,b,n<1000000000)

输出:

一行3位数字,表示:a除以b,小数后第n位开始的3位数字。

样例输入1:

1 8 1

样例输出1:

125

样例输入2:

282866 999000 6

样例输出2:

914

思路:

直接模拟除法的运算吧,其实就是对每次运算后的余数 r 进行判断,比如 是被除数a ,除数为b。

首先a对b取整,得到小数点前边的整数部分,然后余数 r = a % b。r肯定小于b了,然后 r * 10 是下一个操作的被除数,除数依然是 b ,此时,余数 r = r * 10 -(( r*10) / b)*b。其中 (r * 10) /b 得到的是当前位的小数,这里纯粹就是模拟数学计算中的操作,自己拿笔写一写就出来了。

当循环到第n位了,开始输出小数,循环到n+2为止。

代码

#include <bits/stdc++.h>
using namespace std;

int a,b,n;
int main() {
    
    

	cin >> a >> b >> n;

	int r = a % b;
	for(int i = 1; i <= n+2; i++ ){
    
    

		if(i >= n){
    
    
			cout << (r*10) / b;
		}	

		r = r*10 - ((r*10) / b)*b;	
	}
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/u014117943/article/details/104816397