編寫程式,接受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 求總共有多少解 注 西洋棋的棋子是在格仔中間...