2019華科軟院學碩上機(三) 分數轉小數

2021-10-04 04:03:50 字數 2003 閱讀 4694

編寫程式,接受4個以n/d形式輸入的分數,其中n(0<=n<=65535)為分子,d(0<=d<=65535)為分母,輸出他們的小數形式。

如果小數存在迴圈節,則用括號括起來,如1/3=.33333...表示為0.(3)。

輸入格式:

輸入4個n/d形式的分數

輸出格式:

輸出n/d=小數部分,小數部分如存在迴圈節則將迴圈部分用括號括起來。

輸入樣例:

8/5 1/3 11/13 2/15
輸出樣例:

8/5=1.6

1/3=0.(3)

11/13=0.(846153)

2/15=0.1(3)

解決方法:(1)演算法思想:模擬除法運算的運算過程。

譬如樣例中的11/13,d=11,n=13.

①11<13,11*10/13=8,餘數=6

②6<13,6*10/13=4,餘數=8

③8<13,8*10/13=6,餘數=2

④2<13,2*10/13=1,餘數=7

⑤7<13,7*10/13=5,餘數=5

⑥5<13,5*10/13=3,餘數=11

⑦11<13,11*10/13=8,餘數=6

不難發現在第⑦步,得到的商8,餘數6和之前第①步得到的商8,餘數6相等,該小數在第⑦步開始迴圈。

程式邏輯分為兩個部分:

第一部分模擬除法運算,每進行一步除法運算,都需要將當前得到的商和餘數,分別儲存在陣列中,並且交給第二部分進行迴圈檢測;

第二部分將傳遞進來的商和餘數,和儲存在陣列中的歷史商和餘數依次比較,若不相等,告知第一部分繼續進行除法運算,若相等,則記錄當前商所在下標,該下標為迴圈節起始位置,直到陣列結束為迴圈節結束。

(2)**實現:

#include #include #include #include #include using namespace std;

/*程式邏輯分為兩個部分:

第一部分模擬除法運算,

每進行一步除法運算,

都需要將當前得到的商和餘數,

分別儲存在陣列中,

並且交給第二部分進行迴圈檢測;

第二部分將傳遞進來的商和餘數,

和儲存在陣列中的歷史商和餘數依次比較,

若不相等,告知第一部分繼續進行除法運算,

若相等,則記錄當前商所在下標,該下標為迴圈節起始位置,

直到陣列結束為迴圈節結束。

*/int pos = 0;

//尋找迴圈節,當前餘數和商和之前儲存的餘數和商相等時找到迴圈節,迴圈節起始位置為pos

bool find(vectorrem, vectordec, int r, int c)

}return true;

}//模擬除法運算

void repetend(int n, int d)

int r, c; //r是餘數,c是商

c = n * 10 / d;

r = (n * 10) % d;

vectorrem, dec; //rem是商陣列儲存之前的商,dec是餘數陣列儲存之前的餘數

2019華科軟院學碩上機(二) 進製轉換

十二進位制是數學中一種以12為底數的計數系統,它由0 9,a,b組成,與十進位制的對應關係是 0 9對應0 9,a對應10,b對應11。例如,十二進位制的a2,十進位制是122。輸入乙個僅含十二進位制數字的字串 字母一律小寫,不超過8個字元 完成下列任務 1 輸出該十二進位制數每一位對應的十進位制數...

約瑟夫環問題(華科軟院上機題目)

問題分析 一群人 排列序號從1到n,n可設定 圍成一圈,按一定規則出列,剩餘的人仍然圍成一圈.出列規則是順著1到n的方向對圈內的人從1到c計數 c可設定 圈內計數為c的人出列,剩餘的人重新計數,按上述規則,讓圈內所有的人出列.請程式設計順序輸出出列編號的序列 如下 includeint a 100 ...

西洋棋馬走日(華科軟院上機)

問題描述 假設西洋棋棋盤有5 5共25個格仔。設計乙個程式,使棋子從初始位置 棋盤編號為1的位置 開始跳馬,能夠把棋盤的格仔全部都走一遍,每個格仔只允許走一次。要求 1 輸出乙個解 用二維陣列來記錄馬跳的過程,即 步號,棋盤格編號 左上角為第一步起點 2 求總共有多少解 注 西洋棋的棋子是在格仔中間...