小数第 n n n位[思维]
time limit per test | memory limit per test | input | output |
---|---|---|---|
1 seconds | 256 megabytes | standard input | standard output |
Description:
我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。
如果我们把有限小数的末尾加上无限多个0,它们就有了统一的形式。
本题的任务是:在上面的约定下,求整数除法小数点后的第n位开始的3位数。
Input
一行三个整数:a b n,用空格分开。a是被除数,b是除数,n是所求的小数后位置(0<a,b,n<1000000000)
Output
一行3位数字,表示:a除以b,小数后第n位开始的3位数字。
One Example input
1 8 1
One Example output
125
Two Example input
1 8 3
Two Example output
500
Three Example input
282866 999000 6
Three Example output
914
分析:
题意:
思维很简单,就是直接做会超时
因此可以加个步骤,每次直接十位十位地算,这样时间复杂度可以降为O(1e8)
还是要多加思考,第一发想说莽过去(果然不能莽啊,毕竟蓝桥杯是一次性提交的 Q A Q QAQ QAQ
解释一下代码
先回顾一下原本的除法
63 ÷ 13 = 4.846153846153846... 63 \div 13 = 4.846153846153846... 63÷13=4.846153846153846...
那么我们要求小数点后的数可以先求出当前的余数 63 % 13 = 11 63 \% 13 = 11 63%13=11
求余数是因为我们所得到的小数,其实就是这个余数继续 ÷ 13 \div 13 ÷13 所得到的
比如现在相求的是小数点后第二、三、四位,令 a = 11 , x = 0 , i d = 1 a = 11, x = 0, id=1 a=11,x=0,id=1,
x x x 表示所要的余数那几位的数, i d id i