zoukankan      html  css  js  c++  java
  • 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;
    }
    
    Yesterday is history,tomorrow ismystery,but today is a gift!That why it is called Present!
  • 相关阅读:
    【JavaScript DOM 编程艺术】 笔记
    如何循序渐进有效学习 JavaScript?
    如何正确学习JavaScript
    HTML5学习
    window上杀死node进程
    HTML5:离线存储
    js面向对象的理解
    H5项目常见问题及注意事项
    查找已连接过的wifi密码
    flex的兼容
  • 原文地址:https://www.cnblogs.com/VictorierJwr/p/12864721.html
Copyright © 2011-2022 走看看