C++编程小技巧(纯干货)

(1)当出现连续无限次输入的时候,可以使用下列表达式

while(cin>>x)
{
    
    ....}

(2) 当想判断下次输入的值,可以采用下列表达式

cin>>X>>y;
while(x!=0 && y!=0)
{
    
    
	......
	cin>>x>>y;  //再次输入非常重要
}

(3) 当想保留小数点几位时,可以用以下格式,注意的是,已经赋值的数,输出的数的小数点默认只保留一位

#include<iomanip> //头文件一定要导入管理小数点的文件
	cout << fixed << showpoint << setprecision(2) << result << endl;
	//或者
	cout<<setiosflags(ios::fixed);//设置输入浮点形式
    cout.precision(2);   //设置两位有效数字
    cout<<result;
    //注意的是要关闭小数点控制,否则接下来输出的所有小数都是保留两位
    cout.unsetf(ios::fixed);

可以用位运算来达到乘除效果

	int x = q[l + r >> 1];//这里等于(l + r)/ 2
	x = l + r << 2;//这里等于(1 + r)* 4

(4)当出现输入具有一定规律时,可以使用scanf()函数

在这里插入图片描述

当想获输入中的年月日这些整形数时,可以用scanf()函数

int a,b,c;
scanf("%d/%d/%d",&a,&b,&c);
cout<<a<<" "<<b<<" "<<c;

运行结果

(5)当求解一个数是否为素数时,不必用暴力穷举法,可以使用改良版。

#include<cmath> //要使用sqrt()函数,所以要导入包
n = sqrt(i);
for(j = 2; j<=n; j++)  //通过循环找素数,其中i是素数,n是素数的开方
			{
    
    
				if(i % j == 0) break;
			}

(6)当想将全部字符型数字直接转化为整形,可以直接调用函数vector()。

具体的函数使用可以参考博客:https://blog.csdn.net/weixin_42187898/article/details/93520211?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160015815819195162141232%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=160015815819195162141232&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-1-93520211.pc_ecpm_v3_pc_rank_v3&utm_term=vector%E5%87%BD%E6%95%B0&spm=1018.2118.3001.4187

#include<vector> //一定要引入vector包

vector<int> A,B;  //创建vector对象
string a;
cin>>a; // a = “123456”
int b = a.size(); //可以通过vector()直接求得string型的长度
for( int i = a.size(); i>=0 ; i-- ) A.push_back( a[i] - '0' );
//此段代码执行后,可以得到 A = [ 6, 5 , 4 , 3 , 2 , 1];

for( int i = 0; i < a.size(); i++ ) cout<< A[i] << " ";
//输出:6 5 4 3 2 1 

(7)C++关键字 auto 可以自动判别数据类型——但要使用c++11及以上版本

详细解析:https://blog.csdn.net/xiaoquantouer/article/details/51647865?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160015949119724839818701%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=160015949119724839818701&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-1-51647865.pc_ecpm_v3_pc_rank_v3&utm_term=vector%E5%87%BD%E6%95%B0auto&spm=1018.2118.3001.4187

auto f = 3.14;  //double
auto s("hello");  //const char*
auto z = new auto(9);  //int *
auto x1 = 5, x2 = 5.0, x3 = 'r';   //错误,必须是初始化为同一类型

(8)当要进行精度比较的时候,比如求三次方根,使用二分法做的时候,可以用区间右减去区间左

while( r - l > 1e-8 ) //其中1e-8是1的负八次方
	{
    
    
		double mid = ( l + r ) / 2 ;
		if( three(mid) >= x) r = mid;
		else l = mid;
	}

(9)lowbit函数——提取该数二进制原码中最后一位1所在的位置

int lowbit(int x)
{
    
    
	return x & -x ; //具体操作就是该数的二进制原码和补码(取反加一)进行与运算
}

(10)输出某个数二进制原码

#include<iostream>
#include<cstring>

using namespace std;

int lowbit(int x)
{
    
    
	return x & -x ;
}

int main()
{
    
    
	int n = 10;
	
	for( int i = 3 ; i >= 0 ; i-- ) cout<< ( n - i & 1 ); //这个表示输出第i位二进制数
	return 0;

(11)使用循环求两个数的最大公因数,然后通过两数相乘再除以最大公因数求出最小公倍数。

int gcd( long m , long n )
{
    
    
	whiile( n )
	{
    
    
		long temp = m % n ;
		m = n ; 
		n = temp;
	}
}

(12)使用scanf 和 printf 函数处理字符串,当遇到有些问题,需要字符串第一个字符 a[0] 不存储字符时,可以采用这种方法。

	string a;
    
    scanf("%s" , &a[1] );
    
    printf("%s" , &a[1] );

猜你喜欢

转载自blog.csdn.net/MrChen666/article/details/108479031
今日推荐