做题的总结

本文介绍了C++中的位运算函数__builtin_popcount,以及字符串类型转换(如stoi,stoll等)和sort函数的用法,包括vector和结构体的排序,以及去除小数、字符串转小写和查找功能。同时,还提及了试除法和找出数组最大值及其索引的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

位运算

__builtin_popcount(a)统计数字a在二进制下“1”的个数

字符串转换

stoi: string型变量转换为int型变量

stol: string型变量转换为long型变量

stoul:string型变量转换为unsigned long型变量

stoll: string型变量转换为long long型变量(常用)

stoull:string型变量转换为unsigned long long型变量

stof: string型变量转换为float型变量

stod: string型变量转换为double型变量(常用)

stold:string型变量转换为long double型变量

string s;
stoll(s1,nullptr,16);
//16进制转10进制
stoll(s,nullptr,2);
//2进制转10进制
nullptr表示空指针;

 保留K位小数

#include<bits/stdc++.h>
using namespace std;
int main(){
double m,n,rt,p;
cin>>m>>n>>p;
rt=m*pow(2.718281828459045,(-0.114514*n));
cout<<fixed<<setprecision(p)<<rt;	
		
	return 0;
} 

sort排序

)Sort函数包含在头文件为#include<algorithm>的c++标准库中,调用标准库里的排序方法可以不必知道其内部是如何实现的,只要出现我们想要的结果即可!

II)Sort函数有三个参数:

(1)第一个是要排序的数组的起始地址。

(2)第二个是结束的地址(最后一位要排序的地址)

(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。

Sortt函数的第三个参数可以用这样的语句告诉程序你所采用的排序原则

less<数据类型>()//从小到大排序

greater<数据类型>()//从大到小排序
 

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
   vector<int>arr;
   
    for(int i=0;i<n;i++)
    {   int a;
        cin>>a;
        arr.push_back(a);
    }
    sort(arr.begin(),arr.end());
    for(vector<int>::iterator it=arr.begin();it!=arr.end();it++)
    {
        cout<<*it<<" ";
    }
    
    return 0;
}

或者

#include<iostream>
#include<algorithm>
using namespace std;
 
int main()
{
 
	int a[10]={9,6,3,8,5,2,7,4,1,0};
 	sort(a,a+10,greater<int>());
 	
 	for(int i=0;i<10;i++)
 	cout<<a[i]<<" ";
	return 0;
}

 等价与vector注意两者的使用方法

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
   int a[n];
   
    for(int i=0;i<n;i++)
    {   
        cin>>a[i];
        
    }
    sort(a,a+n);
      for(int i=0;i<n;i++)
    {   
        cout<<a[i]<<" ";
        
    }
    
    return 0;
}

排除输入的小数的方法

字符串集体转小写的方法

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    cin>>s;
    for(char &c:s)
    {
        c=tolower(c);
    }
 
        int b=s.find("bob");
    if(b<0)cout<<"-1";
    else cout<<b;
}

命名时以数字开头会无法编译

sort的进阶使用暨结构体的复习

#include<bits/stdc++.h>
using namespace std;

struct T {
	int h;
	int m;
	int s;
};
bool camp(T a,T b)
{
	return a.h*3600+a.m*60+a.s< b.h*3600+b.m*60+b.s;
}

int main(){
	int n;
	cin>>n;
	struct T arr[n];
	for(int i=0;i<n;i++)
	{
		cin>>arr[i].h>>arr[i].m>>arr[i].s;	
	
	}
	sort(arr,arr+n,camp);
	for(int i=0;i<n;i++)
	{
		cout<<arr[i].h<<" "<<arr[i].m<<" "<<arr[i].s<<endl;
	
	}
	
	
	
	return 0;
}

原题见牛客“竞赛技巧”

试除法

        for(int i=2;i<=x/i;i++)
        {
            if(x%i==0)
            {
               while(x%i==0)
               {
                   x=x/i;
               }
                cout<<i<<' ';
            }
        }
        if(x>1)
        {
            cout<<x<<endl;
        }else{
            cout<<endl;
        }
    }

可很好解决输出素因子时重复输出的问题;且数据之间不相互影响

输出最大值及其最小下标

int max=0;
int maxi=-1;
for(int i=0;i<n;i++)
{
    if(a[i]>max)
    {
        max=a[i];
        maxi=i;
    }
}

关键在于a[i]>max而不是>=

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值