1、
char s2[50];
scanf("%[^\n]", s2); //以换行符作为字符串输入的结束
2、
float f = 0.6;
printf("%.0f", f); //会自动四舍五入为1
3、visual studio 用//同时多行注释
完成注释:先ctrl+k,后ctrl+c
取消注释:先ctrl+k, 后ctrl+u
3、scanf("%d\n", &a);
在scanf中 “\n” 不是表示接受一个回车符,而是表示忽略所有的空白字符(包括回车,空格,tab )。所以想要结束输入,输入任意一个非空白字符即可,但是该字符仍然会留在缓冲区中。
4、浮点错误
浮点错误: 您的程序运行时发生浮点错误,比如遇到了除以 0 的情况
所以发生浮点错误应该考虑程序中:
是否可能出现了一个数除以0的情况
是否可能出现了一个数取余0的情况
是否发生了数据溢出而导致的除以0或者取余0的情况
5、求一个连续序列的最大长度(Day 10: Binary Numbers,hackerrank)
求连续1的最大长度
int t = 0, s = 0;
while(n){
int rem;
rem = n % 2;
n /= 2;
if(rem == 1){
s++;
if(s >= t)
t = s;
}
else
s = 0;
}
printf("%d", t);
s用来计算,t用来记录
6、scanf
char c;
scanf("%c", &c); 此时 空格 和 转义字符(比如'\n') 都作为有效字符,都会被c接收
char c[10];
scanf("%s", &c); 遇见 空格、回车、跳格;宽度;非法输入;结束接收数据
7、输出符号问题
double f = -0;
double d = -0.0;
printf("%f\n", f);
printf("%f\n", d);
第一个没有负号,第二个有负号
第一个是IEEE754标准0特殊表示,第二个是规范化下的近似0表示
8、new
int *p = new int[10];为具有10个数组元素的整型数组分配内存空间,并将首地址赋给p;
int *p = new int(10);动态分配一个int型元素大小的空间,并将10作为初值赋值给它;
9、树中结点数等于所有结点度数的和加1.
10、#include <string>
stoi()函数能将字符转化为整数。
11、runtime_error异常抛出
12、#include <stack>
empty() 堆栈为空则返回真
pop() 移除栈顶元素(不会返回栈顶元素的值)
push() 在栈顶增加元素
size() 返回栈中元素数目
top() 返回栈顶元素
13、#include <queue>
q.empty()队列为空返回真
q.size()访问队列q中的元素个数
q.push(a)会将一个元素a置入队列q中。
q.front()会返回队列q内的第一个元素(也就是第一个被置入的元素)
q.back()会返回队列q中最后一个元素(也就是最后被插入的元素)
q.pop()会从队列q中移除第一个元素(不会返回这个元素)
14、无符号数和有符号数
int是4个字节,即32位,最大能表示的数是4294967295(2^32 - 1)
int n = 4294967295;
printf("%u", n); //输出4294967295 无符号表示范围0 ~ 2^32 - 1
printf("%d", n); //输出-1 有符号表示范围-2^31 ~ 2^31 - 1
4294967295二进制表示为32个1,无符号数表示4294967295,有符号数通过补码转化为-1;也就是说 无符号数表示 的 最大数 在 有符号表示 中是 -1 。
而如果n = 4294967296,则输出0;因为4294967296二进制表示是1加上32个0,而int只有32位,也就是说第一个1被截断,只剩32个0,所以输出0;
可以用这个特点来判断一个编译器int,long等的字节(最大能表示的数是2^8 - 1, 2^31 - 1 ,还是2^63 - 1)
15、float 1e-6 近似0 double 1e-15 近似0
16、debug时先考虑输入数值的范围,分类讨论,考虑极端情况,再去考虑算法实现的细节问题
17、注意一次判断多个输入数据时,累加累乘器要清零,开辟的空间要释放
char s2[50];
scanf("%[^\n]", s2); //以换行符作为字符串输入的结束
2、
float f = 0.6;
printf("%.0f", f); //会自动四舍五入为1
3、visual studio 用//同时多行注释
完成注释:先ctrl+k,后ctrl+c
取消注释:先ctrl+k, 后ctrl+u
3、scanf("%d\n", &a);
在scanf中 “\n” 不是表示接受一个回车符,而是表示忽略所有的空白字符(包括回车,空格,tab )。所以想要结束输入,输入任意一个非空白字符即可,但是该字符仍然会留在缓冲区中。
4、浮点错误
浮点错误: 您的程序运行时发生浮点错误,比如遇到了除以 0 的情况
所以发生浮点错误应该考虑程序中:
是否可能出现了一个数除以0的情况
是否可能出现了一个数取余0的情况
是否发生了数据溢出而导致的除以0或者取余0的情况
5、求一个连续序列的最大长度(Day 10: Binary Numbers,hackerrank)
求连续1的最大长度
int t = 0, s = 0;
while(n){
int rem;
rem = n % 2;
n /= 2;
if(rem == 1){
s++;
if(s >= t)
t = s;
}
else
s = 0;
}
printf("%d", t);
s用来计算,t用来记录
6、scanf
char c;
scanf("%c", &c); 此时 空格 和 转义字符(比如'\n') 都作为有效字符,都会被c接收
char c[10];
scanf("%s", &c); 遇见 空格、回车、跳格;宽度;非法输入;结束接收数据
7、输出符号问题
double f = -0;
double d = -0.0;
printf("%f\n", f);
printf("%f\n", d);
第一个没有负号,第二个有负号
第一个是IEEE754标准0特殊表示,第二个是规范化下的近似0表示
8、new
int *p = new int[10];为具有10个数组元素的整型数组分配内存空间,并将首地址赋给p;
int *p = new int(10);动态分配一个int型元素大小的空间,并将10作为初值赋值给它;
9、树中结点数等于所有结点度数的和加1.
10、#include <string>
stoi()函数能将字符转化为整数。
11、runtime_error异常抛出
12、#include <stack>
empty() 堆栈为空则返回真
pop() 移除栈顶元素(不会返回栈顶元素的值)
push() 在栈顶增加元素
size() 返回栈中元素数目
top() 返回栈顶元素
13、#include <queue>
q.empty()队列为空返回真
q.size()访问队列q中的元素个数
q.push(a)会将一个元素a置入队列q中。
q.front()会返回队列q内的第一个元素(也就是第一个被置入的元素)
q.back()会返回队列q中最后一个元素(也就是最后被插入的元素)
q.pop()会从队列q中移除第一个元素(不会返回这个元素)
14、无符号数和有符号数
int是4个字节,即32位,最大能表示的数是4294967295(2^32 - 1)
int n = 4294967295;
printf("%u", n); //输出4294967295 无符号表示范围0 ~ 2^32 - 1
printf("%d", n); //输出-1 有符号表示范围-2^31 ~ 2^31 - 1
4294967295二进制表示为32个1,无符号数表示4294967295,有符号数通过补码转化为-1;也就是说 无符号数表示 的 最大数 在 有符号表示 中是 -1 。
而如果n = 4294967296,则输出0;因为4294967296二进制表示是1加上32个0,而int只有32位,也就是说第一个1被截断,只剩32个0,所以输出0;
可以用这个特点来判断一个编译器int,long等的字节(最大能表示的数是2^8 - 1, 2^31 - 1 ,还是2^63 - 1)
15、float 1e-6 近似0 double 1e-15 近似0
16、debug时先考虑输入数值的范围,分类讨论,考虑极端情况,再去考虑算法实现的细节问题
17、注意一次判断多个输入数据时,累加累乘器要清零,开辟的空间要释放