给你两个数,问你他们相除是多少,有无限循环就把循环体括号括起来
模拟除法运算
把每一次的被除数记下,当有被除数相同时第一个循环就在他们之间。
要注意50个数之后要省略号...
每一次输出之后多打一个回车...
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 int a,b; 5 int flag[30000];//记录该被除数出现的位置 6 int ans[10000],num,cnt; 7 void fuc() 8 { 9 memset(flag,0,sizeof(flag)); num=0; 10 while(a>0) 11 { 12 if(flag[a]>0) break; 13 flag[a]=num; 14 ans[num]=a/b; 15 a%=b; 16 a*=10; num++; 17 } 18 } 19 int main() 20 { 21 while(cin>>a>>b) 22 { 23 printf("%d/%d = ",a,b); 24 fuc(); 25 printf("%d.",ans[0]);//整数位 26 27 if(a>0) 28 { 29 for(int i=1;i<flag[a];i++) cout<<ans[i]; //循环体前 30 cout<<'('; 31 for(int i=flag[a];i<num&&i<=50;i++) 32 { 33 cout<<ans[i]; 34 } 35 if(num-flag[a]>=50) cout<<"..."; 36 cout<<')'<<endl; 37 printf(" %d = number of digits in repeating cycle ",num-flag[a]); 38 } 39 else 40 { 41 for(int i=1;i<num;i++) cout<<ans[i]; 42 cout<<"(0) "; 43 printf(" 1 = number of digits in repeating cycle "); 44 } 45 46 } 47 }