记录16
#include<bits/stdc++.h>
using namespace std;
int main()
{
int k,n=0;
cin>>k;
for (double Sn=0;Sn<=k;Sn+=1.0/n) n++;
cout<<n;
}
突破点
已知:Sn=1+
+
+…+
。显然对于任意一个整数 k,当 n 足够大的时候,Sn>k。
现给出一个整数 k,要求计算出一个最小的 n,使得 Sn>k。
对于 100% 的数据,1≤k≤15。
思路
题目非常的直观,累加求和大于某个数,数据量也没有很大,直接暴力开算就行
代码简析
for (double Sn=0;Sn<=k;Sn+=1.0/n) n++;
因为Sn是一个分数的累加,那么必然有小数,所以用double类型
1.0/n会转为一个double类型
补充
在C++中,当
double和int一起进行算术运算时,结果会被提升为double类型。这是因为C++的类型提升规则会将参与运算的变量提升到更高的精度类型,以确保计算的准确性。这种现象称为隐式类型转换或类型提升。1. 类型提升规则
当不同类型的数值参与运算时,C++会将它们提升到一个共同的类型。具体规则如下:
如果参与运算的类型中有一个是
double,另一个是int,int会被提升为double。如果参与运算的类型中有一个是
float,另一个是int,int会被提升为float。如果参与运算的类型中有一个是
long double,另一个是int,int会被提升为long double。2. 1.0 / n 的类型
在表达式
1.0 / n中,1.0是一个double类型的字面量,而n是一个int类型的变量。根据类型提升规则,n会被提升为double,然后进行除法运算,结果也是double类型。示例代码
#include <iostream> using namespace std; int main() { int n = 5; double result = 1.0 / n; // 1.0 是 double 类型,n 是 int 类型 cout << "Result: " << result << endl; // 输出:Result: 0.2 return 0; }详细解释
1.0的类型:
1.0是一个double类型的字面量。
n的类型:
n是一个int类型的变量。类型提升:
在表达式
1.0 / n中,n会被提升为double类型,然后进行除法运算。结果类型:
由于
1.0是double类型,n被提升为double类型,因此结果也是double类型。3. 为什么需要类型提升
类型提升的目的是为了确保计算的准确性。如果
1.0是double类型,而n是int类型,直接进行除法运算可能会导致精度丢失。通过将n提升为double类型,可以确保计算结果具有更高的精度。4. 显式类型转换
如果你希望避免隐式类型转换,可以使用显式类型转换。例如,如果你希望结果是
int类型,可以使用static_cast<int>进行转换:#include <iostream> using namespace std; int main() { int n = 5; double result = 1.0 / n; // 结果是 double 类型 int int_result = static_cast<int>(1.0 / n); // 显式转换为 int 类型 cout << "Result: " << result << endl; // 输出:Result: 0.2 cout << "Int Result: " << int_result << endl; // 输出:Int Result: 0 return 0; }总结
在C++中,当
double和int一起进行算术运算时,int会被隐式提升为double,以确保计算的准确性。这种类型提升是C++语言的特性之一,旨在避免精度丢失。
C++类型提升与级数求和解析
368

被折叠的 条评论
为什么被折叠?



