杭电1000和1001

杭电OJ第一部分练习题答案记录

1000
1.这里scanf_s是我用的编译器原因,提交答案可以改成scanf就可以了。
2.另外解释一下EOF的作用:EOF在库函数中其实被宏定义,相当于-1,因为题目举例的输入输出只是举例子,一个代码的要求不仅仅满足于一组数据,所以会有while (scanf_s("%d %d", &A, &B) != EOF) 这种的语法出现,目的就是为了输入多组数据。
3.退出含有EOF的while循环的操作:EOF=-1 按ctrl+c/d/z再按回车,即退出循环(简单的说就是键盘里有一组键盘相加为-1,每个电脑系统不一样)。

#include <stdio.h>
int main() {
    
    
	int A, B;
	while (scanf_s("%d %d", &A, &B) != EOF) {
    
    
		printf("%d\n", A + B);
	}
	return 0;
}

1001
这里是正确答案,防止n*(n+1)超出int范围

#include<stdio.h>
int main()
{
    
    
	int n, sum;
	while (scanf("%d", &n) != EOF)
	{
    
    
		if (n % 2 == 0)
			sum = n / 2 * (n + 1);
		else
			sum = (n + 1) / 2 * n;
		printf("%d\n\n", sum);
	}
	return 0;
}

还有一种方法是,这种方法其实本身没有问题,就是这个题目要求防止溢出,所以提交的时候被编译错误了,数据随机的嘛。

#include <stdio.h>
int main()
{
    
    
	int n;
	while (scanf("%d", &n) != EOF)
	{
    
    
		int sum = 0;
		for (int i = 1; i <= n; i++)
			{
    
    
				sum += i;
			}
		printf("%d\n\n", sum);
	}
	return 0;

猜你喜欢

转载自blog.csdn.net/forever_up422/article/details/120713111