题目:https://vjudge.net/problem/UVA-202
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=138
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; int main() { int n,d,x,y; int ansx[3003],ansy[3003]; while(scanf("%d%d",&n,&d)!=EOF){ memset(ansx,0,sizeof(ansx)); memset(ansy,0,sizeof(ansy)); x=y=0; ansx[0]=n/d; ansy[0]=n%d; ansx[1]=ansy[0]*10/d; ansy[1]=ansy[0]*10%d; // cout<<ansx[1]<<endl<<ansy[1]<<endl; for(int i=2;i<3000;i++) { ansx[i]=ansy[i-1]*10/d; ansy[i]=ansy[i-1]*10%d; // cout<<"===="<<ansx[i]<<endl; // cout<<"===="<<ansy[i]<<endl; for(int j=1;j<i;j++) { if(ansx[i]==ansx[j]&&ansy[i]==ansy[j]) { x=j; y=i; break; } } if(x) break; } cout<<n<<"/"<<d<<" = "<<ansx[0]<<"."; for(int i=1;i<x;i++) { cout<<ansx[i]; } cout<<"("; if(y-x>50) { for(int i=x;i<x+50;i++) cout<<ansx[i]; cout<<"..."; } else { for(int i=x;i<y;i++) { cout<<ansx[i]; } } cout<<")"<<endl; cout<<" "<<y-x<<" = number of digits in repeating cycle"<<endl; cout<<endl; } return 0; }
思路:
辗转相除,数组存储每一位,前后对照找到两个数字相等并且余数相等的就说明循环节找到了