一、double类型输入输出
int m,n;
scanf("%lf%lf",&m,&n);
printf("%lf",m/n);
```、
二、n&1判断n是否为偶数
&是位与操作符,n&1,不是将n的二进制形式与00000000 00000001按位做与操作。这时,只要n的最右边一位是1,结果就不是0,为true,条件成立。所以这句话实际上就是if(n%2==1)***但是没有n&1快***
三、fabs与abs
abs是对整数取绝对值
fabs是对浮点数取绝对值。
函数原型:
int abs(int x)
double fabs(double x)
四、pow()函数
pow(float x, float y) 就是计算x的y 次幂,所以pow(2,i-1)就是2的i-1次方,n+=pow(2,i-1)就是n=n+pow(2,i-1)即原来的n加上2^(i-1)赋值给n;
第一位一定是有效位,不会出现前导0。这个是一个高精度乘法吧,也不能说是求pow(m,n)吧,因为真正的POW函数,m和n 都可以是double型的,也就是说,可以算根号3之类的,不过pow函数效率很低。这个程序仅能执行整数的n次幂
五、reverse
reverse函数功能是逆序(或反转),多用于字符串、数组、容器。头文件是#include <algorithm>
reverse函数用于反转在[first,last)范围内的顺序(包括first指向的元素,不包括last指向的元素),reverse函数无返回值
eg. :
string str="hello world , hi";
reverse(str.begin(),str.end());//str结果为 ih , dlrow olleh
vector<int> v = {5,4,3,2,1};
reverse(v.begin(),v.end());//容器v的值变为1,2,3,4,5
reverse()会将区间[beg,end)内的元素全部逆序;
reverse_copy()会将源区间[sourceBeg,sourceEnd)内的元素复制到"以destBeg起始的目标区间",并在复制过程中颠倒安置次序;
reverse_copy()返回目标区间内最后一个被复制元素的下一个位置,也就是第一个未被覆盖的元素;
调用者必须保证目标区间足够大,要不就得使用插入型迭代器;
六、>>
mid=l+r+1>>1; l+r的值右移1位,相当l+r的值除以2取整。
12的二进制表示是00001100,12>>1将00001100右移一位,变为00000110,即6
另外<<就是左移,相当于乘以2.
七、 tolower函数
将字母字符转化成小写
char(tolower(x))<==>char(x+32)
cout<<tolower(x)<<endl; //输出acsll码值
八、^ 按位异或
a^b表示:a异或b
a b a^b
0 0 0
0 1 1
1 0 1
1 1 1
九、cin.getline()
用法:接受一个字符串,可以接收空格并输出
延伸:
1、cin.getline()实际上有三个参数,cin.getline(接收字符串的变量,接收字符个数,结束字符)
2、当第三个参数省略时,系统默认为'\0'
3、如果将例子中cin.getline()改为cin.getline(m,5,'a');当输入jlkjkljkl时输出jklj,输入jkaljkljkl时,输出jk
十、getline()
用法:接收一个字符串,可以接收空格并输出,需包含“#include<string>"
#include<iostream>
#include<string>
using namespace std;
main ()
{
string str;
getline(cin,str);
cout<<str<<endl;
}
输入:jkljkljkl
输出:jkljkljkl
输入:jkl jfksldfj jklsjfl
输出:jkl jfksldfj jklsjfl
注意的问题
1、cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数
2、当同时使用cin>>,getline()时,需要注意的是,在cin>>输入流完成之后,getline()之前,需要通过
str="\n";
getline(cin,str);
的方式将回车符作为输入流cin以清除缓存,如果不这样做的话,在控制台上就不会出现getline()的输入提示,而直接跳过,因为程序默认地将之前的变量作为输入流。
十一、(1.)isalpha()
isalpha()函数用来检测一个字符是否是字母
头文件为<ctype.h>
(2.)isdigit()
isdigit()判断一个字符是否是十进制数字
返回为非零(真)表示是十进制数字
返回值为零(假)表示不是十进制数字
十一、long long 的输入输出
scanf("%lld",&n);
printf("%lld",n);