ACM 小结1

做了这么多题有一些想不到的不能AC的情况需要总结下:
遇见的比较偏的不能AC的情况 有: 错误使用memset 函数的。

错误使用cin,cout的
输入方式 while(scanf(“%d”,&n)!=EOF) 没有写!=EOF 判断的
memset方法只能初始单字节数组,如果是多字节数组比如int型数组,则只能初始化值为 0,-1, 因为memset是按字节初始化的。

所以养成一个做题的好习惯。

  1. 无论有几组数组,输入一定要写成
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 不能执行加操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值