860 字
4 分钟
L1-011~L1-015的笔记
Waiting for api.github.com...
P.S. 这份笔记同步发布在我的博客上,建议在博客中查看以享受完整的MD Extended Features. 你可以点此快速跳转到相应页面,我的博客地址为https://samera2022.github.io
L1-011
代码部分
#include <bits/stdc++.h>using namespace std;typedef long long ll;
void solve(string& A, string& B);
int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); string A; getline(cin,A); string B; getline(cin,B); solve(A,B); return 0;}
void solve(string& A, string& B) { const int len = static_cast<int>(B.length()); for (int i = 0; i <= len; i++) A.erase(remove(A.begin(),A.end(),B[i-1]), A.end()); cout<<A;}笔记部分
- 在Java中,我们可以直接通过
replace(CharSequence target, "")来快速地删除字符串中全体的某种字符,然而在C++中实现这种操作略微复杂一些。在此我们需要先介绍两个方法:string.erase()和remove()。 - 关于
string.erase(iterator first, iterator last):该方法会移除从first到last的所有字符。 - 关于
remove(iterator first, iterator last, char target):该方法会将从first到last的所有非target_char字符向前移动并返回正确新结尾的迭代器,从整体上来看就是把所有的target_char后移了。 - 尽管C++中没有原生的直接移除字符串中某字符的方法,不过有替换字符串中全体某字符为另外一个字符的方法:对于
string s而言,可用replace(s.begin(), s.end(), (char) old_char, (char) new_char)。由于new_char必须是一个char类型,导致不能写''进去……
L1-012
代码部分
#include <bits/stdc++.h>using namespace std;typedef long long ll;
int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int n; cin>>n; cout<<"2^"<<n<<" = "<<pow(2,n); return 0;}笔记部分
<cmath>包含在<bits/stdc++.h>中,因此在using namespace std时可以直接使用pow(2, n)
L1-013
代码部分
#include <bits/stdc++.h>using namespace std;typedef long long ll;
void solve(int N);int factorial(int n);
int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int N; cin>>N; solve(N); return 0;}
void solve(const int N) { int res = 0; for (int i = 1; i <= N; i++) res += factorial(i); cout<<res;}
int factorial(const int n) { if (n==0) return 1; int res = 1; for (int i = 1; i <= n; i++) res *= i; return res;}笔记部分
- 没有什么好记的。
L1-014
代码部分
#include <bits/stdc++.h>using namespace std;typedef long long ll;
int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cout<<"This is a simple problem."; return 0;}笔记部分
- 没有什么好记的。
L1-015
代码部分
#include <bits/stdc++.h>using namespace std;typedef long long ll;
void solve(int N, const string& delimiter);
int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int N; cin>>N; string delimiter; cin>>delimiter; solve(N,delimiter); return 0;}
void solve(const int N, const string& delimiter) { const int row = static_cast<int>(round(static_cast<double>(N)/2)); for (int i = 1; i <= row; i++) { for (int j = 1; j <= N; j++) cout<<delimiter; cout<<"\n"; }}笔记部分
- C++中四舍五入使用的是
round(double)方法。特别地,该方法返回的仍然为double类型,需要进一步手动转换。 - 由于C++的浮点转整数为
去尾转换,你也可以借助这个性质来快速转换:考虑double a;,对于正数你可以使用static_cast<int>(a+0.5),对于负数你可以使用static_cast<int>(a+(-0.5)),对于0而言,为了保持统一性,我们需要使用static_cast<int>(a+0.0f)。因此综合地,你可以使用static_cast<int>( a + ( a == 0 ? 0.0f : ( 0.5 + 1e-9 ) * ( a > 0 ? 1 : -1)))来进行快速四舍五入。类似地,你可以处理五舍六入等情况。关于偏移截断的内容,详见这篇文章或这篇文章 - 如果你希望返回其他整数类型,可以采用
lround(doble)(返回long)和llround(double)(返回long long)。 - 特别地,C++并不原生支持四舍五入到N位小数,如果你需要这样的操作,需要先乘以eN倍,取整后再除以eN还原回来。
L1-011~L1-015的笔记
https://samera2022.github.io/posts/Notes/GPLT/l1-011l1-015/