黄金连分数

黄金分割数0.61803... 是个无理数,这个常数十分重要,在许多工程问题中会出现。有时需要把这个数字求得很精确。
对于某些精密工程,常数的精度很重要。也许你听说过哈勃太空望远镜,它首次升空后就发现了一处人工加工错误,对那样一个庞然大物,其实只是镜面加工时有比头发丝还细许多倍的一处错误而已,却使它成了“近视眼”!!
言归正传,我们如何求得黄金分割数的尽可能精确的值呢?有许多方法。
比较简单的一种是用连分数:

1
    黄金数 = ---------------------
                                 1
                  1 + -----------------
                                   1
                        1 + -------------
                                        1
                               1 + ---------
                                       1 + ...

这个连分数计算的“层数”越多,它的值越接近黄金分割数。
请你利用这一特性,求出黄金分割数的足够精确值,要求四舍五入到小数点后100位。
小数点后3位的值为:0.618
小数点后4位的值为:0.6180
小数点后5位的值为:0.61803
小数点后7位的值为:0.6180340
(注意尾部的0,不能忽略)
你的任务是:写出精确到小数点后100位精度的黄金分割值。

注意:尾数的四舍五入! 尾数是0也要保留!

显然答案是一个小数,其小数点后有100位数字,请通过浏览器直接提交该数字。

注意:不要提交解答过程,或其它辅助说明类的内容。

答案:0.6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911374

题目解目

斐波那契数列两项比值

大数运算,大数加法 大数减法,大数除法

#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
using namespace std;/*
1 转为斐波那契数列的n和n+1项
2 n 取多少?之后在增加n,100位小数不变了
3 手动运算,加法和除法
*/
int n = 500;void i2s(int num, string &str){stringstream ss;ss << num;ss >> str;
}//大数加法
string add(string a, string b){a = a.substr(a.find_first_not_of('0'));b = b.substr(b.find_first_not_of('0'));long long lenA = a.length();long long lenB = b.length();long long len = max(lenA, lenB) + 10;//反转,便于运算   reverse(a.begin(), a.end());reverse(b.begin(), b.end());string ans(len, '0');//初始化答案为len长的字符0 for(int i = 0; i < lenA; i++){ans[i] = a[i];}int tmp = 0;for(int i = 0; i < len; i++){if(i < b.length()){tmp += (ans[i]-'0') + (b[i]-'0');   //上一位相加后的进位 }else{tmp += (ans[i]-'0');} ans[i] = tmp % 10 + '0';tmp /= 10;        } reverse(ans.begin(), ans.end());return ans.substr(ans.find_first_not_of('0'));
}
int cmp(string a, string b){if(a.find_first_not_of('0') == string::npos){a = '0';}else{a.substr(a.find_first_not_of('0'));}if(b.find_first_not_of('0') == string::npos){b = '0';}else{b.substr(b.find_first_not_of('0'));}if(a == b){return 0;}if(a.length() > b.length()){return 1;}else if(a.length() < b.length()){return -1;}else{if(a < b){   //按照字典排序比较大小 return -1;}if(a > b){return 1;}else{return 0;}}
}//只考虑a 一定大于等于 b
string subtract(string a, string b){reverse(a.begin(), a.end()) ;reverse(b.begin(), b.end());// string ans = a;for(int i = 0; i < b.length(); i++){if(a[i] >= b[i]){a[i] = a[i] - b[i] + '0';    //差值+‘0’才会转换成字符} else{int k = 1;while(a[i+k] == '0'){a[i+k] = '9';k++;}//保证i+k位上不是0a[i+k] = a[i+k] - '1' + '0';a[i] = (a[i] - '0' + 10) - (b[i] - '0') + '0'; } }reverse(a.begin(), a.end());if(a.find_first_not_of('0') == string::npos){return "0";}return a.substr(a.find_first_not_of('0'));
}string divide(string a, string b){//只考虑a<bstring ans = "0.";//转成减法for(int i = 0; i < 101; i++) {a.append("0");int t = 0;while(cmp(a, b) >= 0){  //a>=b  a = subtract(a, b);    //不停做减法 t++;              //记录做减法次数 }string t_str;i2s(t, t_str);ans.append(t_str); }return ans;
}
int main(int argc, char** argv) {string a = "1";string b = "1";
//  cout << add(a, b) << endl;
//  cout << subtract(a, b) << endl;
//  cout << divide(a, b) << endl;for(int i = 3; i <= n; i++) {string tmp = b;b = add(a, b);a = tmp;}a b 是斐波那契数列的第n-1和n项 string res = divide(a, b);cout << res << endl;cout << res.length()-2 << endl;
//  return 0;
}

【蓝桥杯】真题训练 2013年C++B组 题4 黄金连分数相关推荐

  1. 2019第十届蓝桥杯大赛软件类省赛C++ C组真题题解

    ============================== 2019-2021蓝桥杯C++ C组真题题解: 2019第十届蓝桥杯大赛软件类省赛C++ C组真题题解 2020第十一届蓝桥杯大赛软件类省 ...

  2. 2019第十届蓝桥杯大赛软件类省赛C++ B组真题题解

    ========================================== 2019-2021蓝桥杯C++ B组真题题解: 2019第十届蓝桥杯大赛软件类省赛C++ B组真题题解 2020第 ...

  3. python解答蓝桥杯真题2 猜年龄 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在19351936年应邀来中国清华大学讲学。。。

    python解答蓝桥杯真题2 猜年龄 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学.他曾在1935~1936年应邀来中国清华大学讲学... 问题描述 全排列模板: 美国数学家维纳(N. ...

  4. 2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解

    ============================== 2019-2021蓝桥杯C++ C组真题题解: 2019第十届蓝桥杯大赛软件类省赛C++ C组真题题解 2020第十一届蓝桥杯大赛软件类省 ...

  5. 第五届蓝桥杯真题解析【JavaC组】

    第五届蓝桥杯真题解析[JavaC组] 业精于勤,荒于嬉:行成于思,毁于随.--韩愈 文章目录 ***第五届蓝桥杯真题解析[JavaC组]*** 前言 A:猜年龄 B:等额本金 C:猜字母 D:大衍数列 ...

  6. 【蓝桥杯真题】16天冲刺 Python

    距离比赛很快了,希望和我一起准备的PY党能更加熟练的掌握Python! 1.距离和(模拟赛填空题) 问题描述: 两个字母之间的距离定义为它们在字母表中位置的距离.例如 A和 C 的距离为 2,L 和  ...

  7. 蓝桥杯真题:三羊献瑞

    蓝桥杯真题:三羊献瑞 观查下面的加法算式: 其中相同的汉字代表相同的数字,不同的汉字代表不同的数字. 请你填写"三羊献瑞"所代表的4位数字(答案唯一),不要填写任何多余内容. 分析 ...

  8. # 2014年蓝桥杯真题CC++B组

    2014年蓝桥杯真题C/C++B组 1.啤酒和饮料 题目描述 啤酒每罐2.3元,饮料每罐1.9元,小明买了若干啤酒和饮料,一共花了82.3元. 我们还知道她买的啤酒比饮料的数量多,请你计算他买了几罐啤 ...

  9. 蓝桥杯python省赛冲刺篇2——常用算法的详细解析及对应蓝桥杯真题:打表模拟法、递推递归法、枚举法、贪心算法、差分与前缀和

    注意:加了题目链接 目录 注意:加了题目链接 一.打表模拟法 介绍 1. 算式问题 题目描述 解析与代码演示 2. 求值 题目描述 解析与代码演示 3. 既约分数 题目描述 解析与代码演示 4. 天干 ...

最新文章

  1. CUDA学习(十五)
  2. Java Servlet 技术简介
  3. include_fns.php_管理页面
  4. 洛谷P1828 香甜的黄油 Sweet Butter
  5. sql server select和set赋值的区别
  6. devc写Java_与dev c++类似的程序编写软件(适合初学者使用,支持c,c++,java,php,pascal等).pdf...
  7. php setlocale 中国,PHP setlocale,UTF-8与否?
  8. 中国城市云计算首站现场会成都隆重举行
  9. 答案原文翻译解释《避凶就吉精明鬼,千变万化心不变》这句话是指什么意思?...
  10. 关于iconfont字体图标在IE上无法显示的问题
  11. 工厂系列系统之 MES 系统8 生产计划-订单
  12. OSChina 周六乱弹 —— 给你看个小仙女
  13. 手把手带你做一个Python打飞机游戏
  14. 向量点乘(内积)和叉乘(外积、向量积)概念及几何意义解读(经典)
  15. 广告主流量主怎么申请(微信)
  16. 注册非公共邮箱,学校邮箱
  17. flstudio插件找不到_FLStudio使用教程之Vocodex插件介绍
  18. vue3源码系列之计算属性computed原理剖析
  19. 程序员该如何说话?做人?做事?
  20. 教育行业oa办公软件哪个好?

热门文章

  1. 使用thinkphp后微信token验证失败
  2. ES10新特性01-ES10新特性
  3. android 10.0实现通过系统属性控制挂载otg设备功能
  4. CRC二进制除法的一些总结
  5. MATLAB中三维图像的制作程序
  6. 一文教懂你关于Elasticsearch的安装配置
  7. Linux--vim中显示行数
  8. DataTable用法详解
  9. 操作系统实验--进程间通信
  10. HDU 4687 Boke and Tsukkomi【带花树】