1.栈
1.1空栈不能取顶。
if(stack.top() == '(' || stack.size() == 0)
//如果栈本身为空,这里if中首先取栈顶,就会导致段错误
//SIGSEGV --- Segment Fault
2.字符串String
2.1字符串定义的时候要申请空间,在没申请空间(初始化)的情况下直接用下标访问某处字符并不会存储到字符串中,其实那个地方仍旧是字符串结束符(只是一种标记),即‘\0’。
2.2回文数字的生成
以7(n)位回文数为例,那么前3位(n/2)必然是从100-999(pow(10,n/2-1):pow(10,n/2)),只需要把这个数反复求余、除以10,就能得到每一位后,填充回文数的右半部份。
如果是奇数,最中间的那一位循环取0-9。
2.3处理字符串的子字符串后,注意下标值要变更>1。
2.4字符串整体读入时,如果用cin.getline(),但前面也用过cin输入数字,那么必须用cin.get()将数字行的回车吃掉,否则会错读下面的。
char temp[5000];
int ;
cin >> T;
cin.get();//没有这一行,那么temp第一次读到的就是回车了。
while(T--) {
cin.getline(temp, 5000);
}
3.精度损失
考虑到计算机可能由于用科学计数法表示结果而造成不必要的精度损失。
//解决办法:
double ans[50];
cout << fixed << setprecision(0) << ans[b - a + 1] << endl;
4.数据溢出
在迭代打表中,可能结果已经超出int,需要注意换为longlong,实例同上