UVa 202 迴圈小數節

2021-08-08 06:13:32 字數 861 閱讀 1652

題目描述:

輸入整數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 分別記錄餘...