UVa 202 - Repeating Decimals

给你两个数,问你他们相除是多少,有无限循环就把循环体括号括起来

 

模拟除法运算
把每一次的被除数记下,当有被除数相同时第一个循环就在他们之间。
要注意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\n\n",num-flag[a]);
38         }
39         else
40         {
41             for(int i=1;i<num;i++)    cout<<ans[i];
42             cout<<"(0)\n";
43             printf("   1 = number of digits in repeating cycle\n\n");
44         } 
45         
46     }
47 } 

 

你可能感兴趣的:(UVa 202 - Repeating Decimals)