B2073 求小数的某一位

B2073 求小数的某一位

分数 𝑎𝑏ba​ 化为小数后,小数点后第 𝑛n 位的数字是多少?

输入格式

三个正整数 𝑎a,𝑏b,𝑛n,相邻两个数之间用单个空格隔开。0<𝑎≤𝑏≤1000<a≤b≤100,1≤𝑛≤100001≤n≤10000。

输出格式

一个数字。

cpp 复制代码
#include <iostream>
using namespace std;
#include <cmath>
#include <format>
#include <vector>
#include <algorithm>
int main(){
  int a,b,n;
  cin>>a>>b>>n;
   a %=b;
   int x;
  while(n--)
  {
   //模拟长除法,进行求解
    a = (a * 10)%b;//更新余数
    
    
    
  }
    int res = (a * 10)/b;
  cout<<res <<endl;
}

我们这样做的原因是因为 `a` 是上一次迭代中的**余数**,它需要被**放大**以获取下一个小数位。

为什么要乘以 10:

当我们用手动除法来处理小数时,计算小数点后每一位的过程其实是通过**不断将余数乘以 10**,并继续除以分母来获得下一位的小数。

例如,假设我们在计算 \( \frac{1}{7} \) 时:

  1. **第一次计算**:

( 1 /7 = 0 )(整数部分),余数是 `1`。

现在我们需要计算小数部分:将余数 `1` 乘以 `10`,得到 `10`。

( 10 / 7 = 1 )(小数点后的第一位是 `1`),余数是 `3`。

  1. **第二次计算**:

( 3 /10 = 30 )。

( 30 / 7 = 4 )(小数点后的第二位是 `4`),余数是 `2`。

  1. **第三次计算**:

( 2 / 10 = 20 )。

( 20 / 7 = 2 )(小数点后的第三位是 `2`),余数是 `6`。

正因为如此,我们需要将余数乘以 10 才能得到下一个小数位的正确结果,而 `a` 是当前余数,通过 `a * 10 / b` 得到下一位小数的值。

直接输出 `a` 是不对的原因:

如果直接输出 `a`,你只是获得了上一次除法的余数,而不是小数点后的数字。你需要通过 `a * 10 / b` 来计算出具体的小数位。

总结:

  • `a` 是上一轮除法得到的**余数**。

  • 将余数乘以 `10`,然后除以 `b`,就能得到**当前小数位**。

  • 直接输出 `a` 只会输出余数,而不是你想要的小数位。

这就是为什么要通过 `a * 10 / b` 来获得正确的小数位的原因。

相关推荐
robin_suli5 分钟前
链表系列一>两两交换链表中的结点
数据结构·算法·链表
KyollBM27 分钟前
【CF】Day44——Codeforces Round 908 (Div. 2) C + Codeforces Round 1020 (Div. 3) DE
算法
努力学习的小廉31 分钟前
我爱学算法之—— 二分查找(上)
开发语言·c++·算法
小彭律师39 分钟前
SinSR模型剪枝实验报告
人工智能·算法·剪枝
wqfhenanxc2 小时前
Mixing C++ and Rust for Fun and Profit 阅读笔记
c++·笔记·rust
R-G-B2 小时前
【MFC】 VS2022打开低版本的MFC,双击.rc文件,DIalog加载失败,页面弹窗fatal error RC***:cannot open*****
c++·mfc·vs打开较早版本mfc·双击.rc文件·dialog加载失败·fatal error rc·cannot open
敲上瘾2 小时前
基于Tcp协议的应用层协议定制
linux·运维·服务器·网络·c++·网络协议·tcp/ip
莹莹学编程—成长记3 小时前
string的模拟实现
服务器·c++·算法
喵先生!6 小时前
C++中的vector和list的区别与适用场景
开发语言·c++
xMathematics7 小时前
计算机图形学实践:结合Qt和OpenGL实现绘制彩色三角形
开发语言·c++·qt·计算机图形学·cmake·opengl