做了这么多题有一些想不到的不能AC的情况需要总结下:
遇见的比较偏的不能AC的情况 有: 错误使用memset 函数的。
错误使用cin,cout的
输入方式 while(scanf(“%d”,&n)!=EOF) 没有写!=EOF 判断的
memset方法只能初始单字节数组,如果是多字节数组比如int型数组,则只能初始化值为 0,-1, 因为memset是按字节初始化的。
所以养成一个做题的好习惯。
- 无论有几组数组,输入一定要写成
while(scanf("%d",&n)!=EOF){
}
这种形式,并且只用scanf,, printf ,且慎用memset
对于多测试用例的情况,要注意每次测试用力开始之前,都要进行数据结构的初始化工作,保持开始的状态,避免上次的测试结果对下一次的运算造成影响。
如果两个int数很大,结果需要放到double型里面,
那么第一步请先乘以 1.0,转化成double型否则可能中间结果溢出,导致得不到正确答案
比如
int n;
// n可能很大,
double sum=0;
sum=n*(n+1)*(n+2)/6.0;
如果我们不在第一步乘以1.0,那么n*(n+1) 可能就已经溢出,结果自然是错误的,所以正确的写法是。
sum=1.0*n*(n+1)*(n+2)/6.0;
这样第一步就是double型了,不会溢出。
同理还有一种,
求两个数的平均数。
int a,b;
//a,b 可能很大
int mid=a+b/2; // 可能溢出,错误写法
int mid=a+(b-a)/2; // 正确写法
string 和char[] 数组的录入方式
总结: 如果是string 只能用c++ 的cin
如果想用scanf(“%s”) 那么只能用char[] ,不能混着来。
还有个点是c++ 中 不要用 使用string s=""; char ch;s+=ch;
这种用法,即c++中, 空 string “”和char 不能执行加操作