42 小数第n位
Posted victorierjwr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了42 小数第n位相关的知识,希望对你有一定的参考价值。
42 小数第n位
作者: Turbo时间限制: 1S章节: 基本练习(循环)
问题描述 :
我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。
如果我们把有限小数的末尾加上无限多个0,它们就有了统一的形式。
本题的任务是:在上面的约定下,求整数除法小数点后的第n位开始的3位数。
输入说明 :
一行,三个整数:a b n,用空格分开。a是被除数,b是除数,n是所求的小数后位置(0<a,b,n<1000000000)
输出说明 :
一行,3位数字,表示:a除以b,小数后第n位开始的3位数字。
比如输入:
1 8 3
则输出
500
输入范例 :
282866 999000 6
输出范例 :
914
#include <iostream>
using namespace std;
int main(){
int a, b, n;
int arr1[1000];
int arr2[1000];
int len = 0;
cin >> a >> b >> n;
a %= b;
//保存前50位小数
for (int i = 1; i <= 50; i++){
int t = (a * 10) / b;
arr1[i] = t;
a = (a * 10) % b;
}
int temp = a;
//找到循环节
do{
int t = (a * 10) / b;
arr2[len++] = t; //保存循环节
a = (a * 10) % b;
} while (temp != a);
if (n <= 50){
//如果k在前50位,直接输出从k处开始的三位
cout << arr1[n] << arr1[n + 1] << arr1[n + 2] << endl;
}
else{
int t = (n - 50) % len; //得到k在循环节中的起始位置
t--; //数组从0开始,所以t要-1
cout<<arr2[t % len]<< arr2[(t + 1) % len]<<arr2[(t + 2) % len]<<endl; //mod len是因为如果t + 2大于循环节了则从头开始
}
return 0;
}
以上是关于42 小数第n位的主要内容,如果未能解决你的问题,请参考以下文章