UVA 202 迴圈小數

2021-09-11 19:26:12 字數 1321 閱讀 5495

題目大意:

輸入整數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]; //分別記錄餘數和商(根據下標一一對應)

int vis[1000004];// > -1 表示 該餘數出現過,其記錄該餘數第一次出現的位置

int main()

else

vis[a] = cnt;

if(repeat)

break;

}printf("%d/%d = %d.",x,y,integer);

if(repeat)

printf("(");

for(int i = pos; i < cnt; ++i)

printf(")\n");

}else

printf("(");

for(int i = pos; i < pos+50; ++i)

printf("...)\n");}}

else

printf("(0)\n");

}printf(" %d = number of digits in repeating cycle\n\n",len);

} return 0;

}

另一種 原理類似,寫起來簡潔點:

#include#include#includeusing namespace std;

const int maxn = 300005;

int quo[maxn]; //分別記錄餘數和商(根據下標一一對應)

int vis[1000004];// > -1 表示 該餘數出現過,其記錄該餘數第一次出現的位置

int main()

pos = vis[a];

len = cnt-vis[a];

printf("%d/%d = %d.",x,y,integer);

for(int i = 0; i < pos; ++i)

printf("(");

if(len <= 50)

}else

printf("...");

}printf(")\n");

printf(" %d = number of digits in repeating cycle\n\n",len);

}}

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的結果保留多位小數!具體方法為計算得出其多位小數 位數要足夠大 再判斷其週期,週...

uva202迴圈小數

此題為演算法入門經典的3 8 這題輸入格式為第二行前面三個空格,然後進行兩個換行。思路主要是通過兩個陣列進行模擬兩者的運算過程,乙個陣列儲存商,乙個陣列儲存餘數,自己進行手算模擬幾次就可以想到,如果有迴圈小數的話,他的餘數會與前面的餘數相等,一旦出現餘數相等,說明出現了迴圈體,就可以進行標記和bre...