題目描述:
輸入整數a和b a大於等於0小於等於3000,b大於等於1小於等於3000,輸出a/b的迴圈小數表示以及迴圈節長度。
如果迴圈週期大於50,只顯示50位,之後的全部用……表示
題解 n除以m的餘數只能是0~m-1,根據抽屜原則,當計算m+1次時至少存在乙個餘數相同,
即為迴圈節;儲存餘數和除數,輸出即可。
模擬小數除法,當你n%m之後,剩下的n/m就是小數部分了,小數部分可以用陣列來存放,我們可以讓n*10再除,即n*10/m,
這樣就可以算出小數字的值了,將其儲存下來,然後用陣列b來存放n%m之後n的值出現的位置(如果b[n]不為0就說明出現了迴圈節).
#include
#include
int main()
,b[3003]=,k=0;
a[k++]=n/m;
n=n%m;
while(!b[n]&&n)
for(int i=1;i50;i++)
if(b[n]==i&&n!=0)
printf("(%d",a[i]);
else
printf("%d",a[i]);
if(!n)
printf("(0"),k=1;//在這行加上了k=1,是因為當你n=1,m=1的時候,迴圈節是1。注意這個坑點
if(k>50)
printf("...");
printf(")\n");
if(n!=0)
k-=b[n];
printf(" %d = number of digits in repeating cycle\n\n",k);
}}
UVA 202 迴圈小數
題意 給出兩個數n,m,求n m的迴圈小數。並輸出是多少位。大致思路 模擬除法運算,而什麼時候就可以知道這是乙個迴圈節了呢,其實很簡單,就是第一次同一餘數出現兩次時就可以說他是乙個迴圈節了。比如1 6 第一次餘數為1,1作為餘數出現了,標記一下,表示1已經出現了,此時的1乘以10就會變成10,繼續模...
迴圈小數 UVa202
輸入整數a和b 0 a 3000,1 b 3000 輸出a b的迴圈小數表示以及迴圈節長度。例如,a 5,b 43,小數表示為0.116279069767441860465 迴圈位元組長度為21 這個題,忘了怎樣使a b的結果保留多位小數!具體方法為計算得出其多位小數 位數要足夠大 再判斷其週期,週...
UVA 202 迴圈小數
題目大意 輸入整數a,b 0 a 3000,1 b 3000 輸出 a b 的迴圈小數表示以及迴圈節長度。code include include includeusing namespace std const int maxn 300005 int rem maxn quo maxn 分別記錄餘...