蓝桥杯算法题:小数第n位

问题描述

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

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

输入格式

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

输出格式

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

样例输入

1 8 1

样例输出

125

样例输入

1 8 3

样例输出

500

样例输入

282866 999000 6

样例输出

914

思路:我也是看了网友的题解才明白的

先举个例子,比如说1/8,首先它的第一位小数1,因为10/8=1……2(因为1不够,要借位,右边的1是商,2是余数),同理取2再进一步除, 20/8=2……4,因此2就是第二位小数,依次类推可得1/8的小数为0.125。那也就是说我知道对于一个数,我知道了1~n-1位的数,那以后的每位都可以通过除和取余来实现。

那如何知道1~n-1位的数呢,可以用快速幂实现,不过还是太大了,得用取模优化,为什么取模没影响呢,因为对于小数来说,整数部分取了模也没有关系的,比如说10/8=1.25,2/8=0.25,只要对除数取模一样,那么小数部分也一样

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll quick_m(int a,int b,int p){
  ll res=1;
  while(b){
    if(b%2)res=res*a%p;
    b/=2;
    a=a*a%p;
  }
  return res;
}
int main(){
  int a,b,n;
  cin>>a>>b>>n;
  a*=quick_m(10,n-1,b);//把n-1位之前的数都变成整数,因为n太大,所以要用快速幂和取模
  a%=b;//为什么这里要取模,比如说1 8 2,上面的式子得到的a是10,若直接用在下边的循环,会出现错误,要保证a<b应用在下边才是小数的结果
  for(int i=0;i<3;i++){//把n,n+1,n+2的结果算出来
    a*=10;
    cout<<a/b;
    a%=b;
  }
  return 0;
}

相关推荐

  1. 算法小数n

    2024-04-14 12:40:03       41 阅读
  2. 12.5每日一(备战小数运算、拆练习)

    2024-04-14 12:40:03       37 阅读
  3. 859——旅行

    2024-04-14 12:40:03       38 阅读
  4. 算法-发现环

    2024-04-14 12:40:03       43 阅读
  5. 算法公园

    2024-04-14 12:40:03       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-14 12:40:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-14 12:40:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-14 12:40:03       82 阅读
  4. Python语言-面向对象

    2024-04-14 12:40:03       91 阅读

热门阅读

  1. Qt第六章对话框

    2024-04-14 12:40:03       38 阅读
  2. SpringBoot 异步延时任务

    2024-04-14 12:40:03       135 阅读
  3. Asp.net 使用了 bootstrap,发布时样式丢失了

    2024-04-14 12:40:03       43 阅读
  4. Hadoop MapReduce解析

    2024-04-14 12:40:03       39 阅读
  5. ChatGPT指导下的学术写作:打造高质量论文

    2024-04-14 12:40:03       41 阅读
  6. Swift中的类

    2024-04-14 12:40:03       49 阅读
  7. python 有什么资格称为编程排行榜第一

    2024-04-14 12:40:03       180 阅读