题目描述
数学课上,楠楠学习了一个新的知识。 两数相除,如果得不到整数商,会有两种情况:一种是得到有限小数,另一种是得到无限小数。从小数点后某一位开始依次不断地重复出现前一个或一节数字的十进制无限小数,叫做循环小数,如 2.9666..., (在数学中它读作“二点九六,六循环” ), 定义循环小数的缩写法是将第一个循环节以后的数字全部略去,并将第一个循环节首末用括号括起来。 例如: 2.966666... 缩写为 2.9(6) 35.232323…缩写为 35.(23) 楠楠发现,根据循环小数的特征,很快能算出这个循环小数中小数点后第 n 位的数字,你能吗?
输入
输入数据有两行。 第一行,输入一个整数 n(0<n<=100000),表示求小数点后的第 n 位。 第二行,一个字符串,用缩写法表示的一个循环小数。
输出
输出一个整数,求出循环小数中小数点后第 n 位的数字。
样例输入
10
352.19(7)
样例输出 7
提示
输入样例 2:
5
7328.(192)
输出样例 2:
9
本蒟蒻的逆天代码 (27分
#include<bits/stdc++.h>
using namespace std;
int n,ans,sum,f=0;
string s,temp="";
int main(){
cin>>n>>s;
ans=s.find('.');
sum=ans+1;
for(int i=sum;i<s.size();i++){
if(s[i]=='('||s[i]==')'){
f=1;
continue;
}
if(f==1)temp=temp+s[i];
}
if(n<=sum)cout<<s[n]-'0'<<endl;
else{
n=n-sum;
cout<<temp[n%temp.size()]-'0'<<endl;
}
return 0;
}