题目描述
小梦学会了列竖式来计算小数点后的情况,如果时间允许,小梦可以一直计算下去,但很可惜时间不允许,小梦最多只能计算到小数点后第n位。当然聪明的小梦遇到循环节时,便会立刻停下来。
输入格式
输入三个正整数a,b和n。分别表示被除数、除数、小数点后最大位数。
输出格式
输出-1,0或者一串数字,表示循环节。如果a/b小数点后前n位中出现了循环节,则输出这个循环节;如果在n位之中还没有计算完,而且没有循环节,则输出0;如果在n位之内就已经计算完,则不可能出现循环小数,输出-1。
样例
输入样例1
1 2 5
输出样例1
-1
样例解释:答案是0.5,小数点后仅1位就计算完备,不可能出现循环节,故输出-1。
输入样例2
3 7 10
输出样例2
428571
样例解释:答案是
输入样例3
3 7 4
输出样例3
0
如样例2,但在4位以内没有出现循环节。
数据范围与提示
-
对于20%的数据,。
-
对于50%的数据,。
-
对于20%的数据,。
#include<iostream>
using namespace std;
int a,b,n;
int ys[400005],cs[400005],ls[400005];
int main(){
cin>>a>>b>>n;
// a%=b;
for(int i=1;i<=n+1;i++){
cs[i]=a/b;
// cout<<cs[i];
if(ls[a%b]!=0){
for(int j=ls[a%b]+1;j<=i;j++){
cout<<cs[j];
}
return 0;
}
ls[a%b]=i;
// cout<<a%b<<" ";
a%=b;
if(a==0){
cout<<-1;
return 0;
}
a*=10;
}
cout<<0;
return 0;
}