Vijos P1696 数与连分数【连分数】
背景
...
...:“這個簡單...我們還是去剛才的海邊唄...”
...:"其實今晚...我是有一定要完成的事情的..." .,
威尼斯真的是一個美麗的城市...很小的時候我就聽說這個地方..
這一天..從貝魯特歸來的商隊..除了布匹和香辛料...還帶來的東方的數字....
也有人曾經討論過它們的歷史...
只是很長時間這些都不被那些數學家們所重視..
人們懷著敬畏的心情..小心的審視著這些新奇的東西...
而它們..給生活在這片土地上的人們所帶來的..是很大的幫助..
...
描述
寫一個程序...可以實現在連分數和分數之間的互相轉換...
樣例1
樣例輸入1
[2;3,7] 51/22樣例輸出1
51/22 [2;3,7]限制
出題人不透露
提示
多組測試數據:
...每一個測試點有多組數據...數據的組數不超過100組...
對于Pascal里...可以這樣子
while not eof do begin
...
end;
來實現這點..
(至于..C++里..我就不太清楚了...)
約分:
計算結果最后是要約分的...但是..在分數轉向連分數的時候..
我們不保證輸入的數據是約分.....
連分數的輸入格式:
連分數的輸入格式是按照wiki里寫的...
第一個位置的分號應該是為了避免可能的歧義~..
English:
我們校內的時候又同學抱怨英文看不懂...可以訪問這個頁...蠻好用的...
或者在wiki左側的語言欄里最下面找中文切換一下就行了...
Range:
數字的規(guī)模都很小...
也就是它們都不會超過longint范圍里....
包括中間的數據...
連分數的項數也不會超過100項..
See also:
連分數的其它知識..可以閱讀....至于這個.....
問題鏈接:Vijos P1696 數與連分數
問題分析:
連分數與分之間相互轉換問題。
需要了解和掌握有關連分數的概念與表示方式,可以查看中英文版的維基百科的“連分數”。
剩下的就是簡單的分數計算問題了。
需要考慮特例的情況。例如,連分數只有a0的情況,分數的分母為1的情況。
程序中不考慮約分的問題。
程序中的迭代計算問題盡可能地簡潔。
題記:
把功能封裝到函數是一種好的做法,程序邏輯更加簡潔。
做分數題,又回到少年時代的感覺。
參考鏈接:(略)
AC的C++程序如下:
#include <iostream> #include <cstdio> #include <cctype> #include <string> #include <vector>using namespace std;string s;void continuedfraction2fraction(string& s) {int i=1;vector<int> a;while(s[i] != ']') {if(isdigit(s[i])) {int v = 0;while(isdigit(s[i])) {v *= 10;v += s[i] - '0';i++;}a.push_back(v);} elsei++;}if(a.size() == 1)printf("%d\n", a.back());else {int n, d;n = a.back();d = 1;a.pop_back();while(a.size() != 0) {swap(n, d);n = a.back() * d + n;a.pop_back();}printf("%d/%d\n", n, d);} }void fraction2continuedfraction(int n, int d) {int nextd;char separator = ';';if(n % d == 0)printf("[%d]\n", n / d);else {printf("[");printf("%d", n / d);nextd = n % d;n = d;d = nextd;while(d != 0) {printf("%c", separator);printf("%d", n / d);nextd = n % d;n = d;d = nextd;separator = ',';}printf("]\n");} }int main() {while(getline(cin, s)) {if(s[0] == '[') {continuedfraction2fraction(s);} else {int numerator, denominator;sscanf(&s[0], "%d/%d", &numerator, &denominator);fraction2continuedfraction(numerator, denominator);}}return 0; }轉載于:https://www.cnblogs.com/tigerisland/p/7563750.html
總結
以上是生活随笔為你收集整理的Vijos P1696 数与连分数【连分数】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 申请退款
- 下一篇: 微博预计要火一阵的SleepSort之S