甲级1065

这道题的意思就是要比较A+B与C的大小,看似很简单,但ABC都是64位的,也就是long long型的,A+B之后还可能越界。

重点就是在处理越界问题上。

 #include<cstdio>
int main() {
int n;
scanf("%d", &n);
for(int i=;i<=n;i++)
{
long long a, b, c;
scanf("%lld %lld %lld", &a, &b, &c);
long long temp = a + b;
bool flag;
if (a > && b > && temp < ) flag = true;//当正溢出的时候
else if (a < && b < && temp >= ) flag = false;//当负溢出的时候
else if (temp > c)flag = true;//当不溢出的时候
else flag = false;
if (flag) printf("Case #%d: true\n",i);
else printf("Case #%d: false\n",i);
}
return ;
}

代码很好理解,主要记住一点

正越界的时候值是负的。

负越界的时候值是正的。这要根据数据储存的符号位和负数的补码来理解。

乙级的一道题

这道题也很简单,但是我的处理方法跟教材不一样。

 #include<cstdio>

 int main()
{
int count = ;
int a, b;
while (scanf("%d%d", &a, &b)!=EOF)
{
if (count == ) {
if (b == ) printf("0 0");
else printf("%d %d", a*b, b - );
}
else if(b) printf(" %d %d", a*b, b - );
count++;
}
return ;
}

我是一次取两位数,再判断是不是第一位,和指数是不是0进行输出。

注意:当只有指数为0的一项时,要输出0,0

并且最后一个还不让输出空格。

教材上是用的大小为1010的数组,储存n次项的系数。然后得到一个求导后的数组,再输出。这样反而有点麻烦了。

在注意一点。。。while()后面别加;哈哈,这种低级错误让我一脸懵逼。

scanf("%d%d", &a, &b)!=EOF一直读取到文档末尾。在命令行界面对应着ctrl+z;

05-11 20:57