蓝桥杯训练 历届试题 小数第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

#include<iostream>
using namespace std;

int main() {
	int n,m,j,k,i,T;
	int a,b,c;
	int count=0;
	scanf("%d%d%d",&a,&b,&n);
	a = a%b;
	int ans1=0,ans2=0,ans3=0;
	int A = a , N = n;
	while (n--) {
		if (a==b) break;

		if (a<b)
			a*=10;
		else {
			c = a/b;
			a = a%b;
			a *= 10;
			if (a==0)break;
		}
		count++;
		if (a%b==A)
			n = N % count;
	}
	if (a==0) cout<<"000"<<endl;
	else {
		ans1 = a/b;
		a = a%b*10;
		ans2 = a /b;
		a = a%b*10;
		ans3 = a/b;
		printf("%d%d%d
",ans1,ans2,ans3);
	}

	return 0;
}