3 0.(4) 0.5 0.32(692307)
4/9 1/2 17/52
思路:题目十分简单,举个例子即可.不简单的是提交了N遍还是WA,后来上网搜了半天,再把G++提交改成C++提交,居然过了,吭爹啊!!!原来如果要调用某个特定平台的API,c_str(),真是见识少吃亏多啊!
x=0.34(59)
即100x=34.(59) (1)
10000x=3459.(59) (2)
(2)-(1),得9900x=3459-34, => x=(3459-34)/9900,记要要化简!算法就是这么简单,实现起来真是坎坷.
#include<iostream> #include<algorithm> #include<math.h> #include<string> using namespace std; inline int gcd(int a,int b) { return b==0 ? a : gcd(b,a%b); } int main() { int T; cin>>T; while(T--) { string str; int left=1,right=1; cin>>str; for(int i=0;i<str.size();++i) { if(str[i] == '(') left=i; else if(str[i] == ')') right=i; } int unCir = atoi(str.substr(2,left-1).c_str()) ; int res = atoi(str.substr(left+1,right-left-1).c_str()) ; if( left == 1) { int len=str.length()-2; if( atoi(str.substr(2,str.length()-1).c_str()) == 0) { cout<<0<<endl; continue; } cout<<(int)res/gcd(res,pow(10.0,len))<<'/'<<(int)pow(10.0,len)/gcd(res,pow(10.0,len))<<endl; } else { double M=pow(10.0,right-3); double b=M-pow(10.0,left-2); double a=unCir*pow(10.0,right-left-1)+res-unCir; cout<<(int)a/gcd(a,b)<<'/'<<(int)b/gcd(a,b)<<endl; } } }