试题 历届试题 小数第n位 储存无限小数,小数点后n小于1000000000

试题 历届试题 小数第n位

问题描述

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

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

输入格式

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

输出格式

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

样例输入
1 8 1
样例输出
125

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

int main() {
	vector<char> Shang;//得到的商放进去	
	int FengZi,FengMu;
	int n;
	int yushu;//余数
	cin >> FengZi >> FengMu >> n;
	FengZi = 10 * (FengZi % FengMu);//这一步是把小数点左边的整数给抹去了,用除法公式就知道这是第一步


	while ( Shang.size() <= n+2) {
		Shang.push_back((FengZi / FengMu)+'0');//char型可以比int减少内存开销,但也增加了一些计算带来的时间开销
		yushu = FengZi % FengMu;
		FengZi = 10 * yushu;
	}

	cout << Shang[n - 1] << Shang[n] << Shang[n + 1];
	return 0;
	
}


这道题可以通过剪枝优化一下内存使用,但考虑到时间花销,觉得暴力也能AC,就没有优化了,最后花费了16ms,121.3MB的内存通过该题。

扫描二维码关注公众号,回复: 9380817 查看本文章
发布了33 篇原创文章 · 获赞 0 · 访问量 534

猜你喜欢

转载自blog.csdn.net/enjoy_code_/article/details/104369672