5.7号第一次蓝桥杯训练(c++)
1.阶乘末尾
(求某数阶乘 的 后 n 位)
1.保留多少位就 % 10的n次方 ( x % pow(10,n) );
2.如果先把sum的阶乘算出来数字会太大,所以阶乘的时候就先 直接取余
3.一次降位输出
#include<bits/stdc++.h> using namespace std; /* 1.保留多少位就余10的n次方 */ int main(){ long long int n,len,sum=1,i,k; cin>>n>>len; //输入n len; long long int t = pow(10,len); //t=10的len次方 for(int i=1;i<=n;i++){ sum*=i; sum=sum%t; // 要保留 n位 就 % 10 n次方 } //sum=sum%t; 如果先把sum的阶乘算出来数字会太大,所以阶乘的时候就先 直接取余 k=t/10; // 4321 取(4位) 10000/10 =1000; 4321/1000 = 4 for(int i=0;i<len;i++){ cout<<sum/k; //输出最高位 4321/1000 = 4 sum%=k; // 去最高位 4321 % 1000 = 321; k/=10; // 依次降位 1000/10 = 100; } }
2.算集合 (交 ,并,补)
1.set容器
自动排序,去重,元素无法直接被更改 https://www.cnblogs.com/wkfvawl/p/11041079.html 常用方法:began(), rbegin()end(),,redn(); clear(), empty(), max_size(),size(), insert() 插入 count() 返回键值出现的次数(0/1)
2.sort()函数 https://www.cnblogs.com/junbaobei/p/10776066.html
排序函数sort(0,n) 默认小到大 , sort(0,n,cmp) 大到小
3.auto ??
4.set<int>::iterator it; ???
#include<bits/stdc++.h> using namespace std; int n,m; int a[1005],b[1005]; set<int>c; //交集 set<int>s1; //并集 int main(){ cin>>n; //集合 大小 for(int i=1;i<=n;i++){ cin>>a[i]; //集合元素 s1.insert(a[i]); //将a[i]加入s1中 } cin>>m; for(int i=1;i<=m;i++){ cin>>b[i]; if(s1.count(b[i])) c.insert(b[i]); //若s1中包含b[i]元素,将b[i]加入 交集c中 s1.insert(b[i]); } //??? set<int>::iterator it; //代替auto 啥的,iterator是迭代器 不太懂 for(it=c.begin(); it!=c.end(); it++) //输出交集 cout<<*it <<" "; puts(""); for(it=s1.begin(); it!=s1.end(); it++) //输出并集 cout<<*it <<" "; puts(""); sort(a+1,a+n+1); //数组排序 sort函数 sort(first,last,无/cmp) for(int i=1;i<=n;i++){ //输出B在A中补集 if(!c.count(a[i])) //若交集c中没有a[i]元素,则输出 a[i] cout<<a[i] <<" "; } puts(""); }
3.https://blog.csdn.net/curryljx/article/details/116507595?spm=1001.2014.3001.5501
4.
5.
我是菜鸡啊

浙公网安备 33010602011771号