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;
}
标签:int,42,整数,小数,有限小数,1000 来源: https://www.cnblogs.com/VictorierJwr/p/12864721.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。