林惜城


私信TA

用户名:reminder

访问量:27428

签 名:

等  级
排  名 94
经  验 8465
参赛次数 0
文章发表 95
年  龄 0
在职情况 学生
学  校 西安电子科技大学
专  业

  自我简介:

哈姆


解题思路:

观察数列,除了第一个数,之后每个数的分母都是前一个数的分子,分子是前一个数的分子分母之和。看清楚规律就好写了。


注意事项:

回头看看1015: [编程入门]求和训练(链接:https://blog.dotcpp.com/a/84306)。那一题中也要求是保留两位小数,而且是在参数传递的过程中就开始保留。本题我一开始写的是(float)(numerator / denominator),然而发现每次结果都是1.00,原来是我对强制类型转换的优先级的理解出了问题。

(1)(float)(num)意思是把num的类型转换成float,顺序是先计算num,如果这个num是两个整型做除法,那就是先算出int的结果,再转成float。在本题中,我定义的numerator和denominator都是short型的,所以会先算出两个short变量的商,再转成float,所以是1.00。

(2)(float)num意思是输出浮点型的num,是(float)在先,反之如果(num)则计算num在先。可以试着编译执行一下这行代码:

cout << fixed << setprecision(2) << (float)(1 / 2) << " " << (float)1 / 2 << endl;

也许会有更好的理解。


参考代码:

#include #include using namespace std;

float seqSum(short n); //有规律数列求和
int main() {
	short N = 0;
	cin >> N;
	cout << fixed << setprecision(2) << seqSum(N) << endl;
	return 0;
}
float seqSum(short n) {
	float res = 0; //求和
	short numerator = 2; //分子,初始为2
	short denominator = 1; //分母,初始为1
	for (short i = 0; i < n; i++) {
		res += (float)numerator / denominator; //注意和(float)(numerator / denominator)的区别
		short tempDen = denominator; //分母的副本
		denominator = numerator; //数列下一个数的分母是上一个数的分子
		numerator += tempDen; //数列下一个数的分子是上一个数的分子和分母之和
	}
	return res;
}


 

0.0分

3 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

cout << fixed << setprecision(2) << (float)(1 / 2) << " " << (float)1 / 2 << endl;
分析的很到位,学到了
2022-04-12 00:35:09
  • «
  • 1
  • »