目录
一,问题
二,思路
三,代码
一,问题
二,思路
- 被除数a的类型设置为long long类型,a变量需要变大,需要更大的数据类型来存储
- 除数b和指定的小数位置n为int类型,这两个变量的的值很小,键盘输入之后不会再变
- 给一个循环,让a不断的变大n次(变大为a*10^n,主要是为了和指定的小数位置对应,如果我要取a/b的小数位的第三位,那么我先想到的就是将a/b的值(商)变大10^n倍,之后去模10,得到各位数。我也可以直接让被除数变大10^n倍,不管是对被除数a还是a/b进行改变,都是为了让商变大10^n倍,方便之后的取余得到个位数。
- 在循环的时候需要判断当前的i索引值是不是和我想要的n相同(因为i从0开始,所以在判断的时候i的值会比n值小,这个时候可以让i+1或者是n-1),输出对应小数位置的值
- 接着就是不断的让a对b取余,为下一次的计算做好准备
下面以56/3为例:
输入:56 3 3
程序处理:
- a=56*10=560
- i=0
- a=560%3=20
- i=1
- a=20*10=200
- i=2(指定的小数位置,i=0,i=1,i=2,刚刚好经过3次,判断条件i+1=n或i=n-1)
- 因为i==2就是需要的小数位置,所以开始打印输出小数位置对应的值=200/3=66,66%10=6,并且后面的程序可以不用再继续运行,给个break关键字跳出循环也可以。
三,代码
#include <iostream>
using namespace std;
int main()
{
long long a;
int b, n;
cin >> a >> b >> n;
for(int i=0; i<n; i++)
{
a*=10;
if(i==n-1) cout<<(a/b)%10;
a%=b;
}
return 0;
}
有问题请在评论区留言或者是私信我,回复时间不超过一天。