跳转到内容

A+B问题

维基百科,自由的百科全书

这是本页的一个历史版本,由Xhoonacker留言 | 贡献2012年10月19日 (五) 01:13编辑。这可能和当前版本存在着巨大的差异。

A+B问题是一个非常简单的程序设计问题。通常是OnlineJudge用来让人测试提交和输入输出方法的题目。

一般描述

输入两个数A和B(一般是在长整范围内的正整数,也就是小于2147483648),输出A+B。

范例程序

var a,b:longint;
begin
    readln(a,b);
    writeln(a+b)
end.
#include<iostream>
int main(){
    unsigned long a,b;
    std::cin>>a>>b;
    std::cout<<a+b<<std::endl;
    return 0;
}

#include<iostream>
using namespace std;
int main()
{
    unsigned long a,b;
    cin >> a >>b;
    cout << a+b << endl;
    return 0;
}
#include <stdio.h>
main()
{
  long a,b;
  scanf("%d%d",&a,&b);
  printf("%d\n",a+b);
}

这两个程序适用于所有输入两个0到2147483647之间的十进制数的,使用标准输入输出的A+B问题。

要注意的问题

在有的版本的A+B题目中,虽然输入的a和b都在长整的范围之内,结果a+b的值不一定也在这个范围。这时候就要使用无符号的长整数,也就是pascal的longword或者cardinal、c++的unsigned long。如果这道题目的数据也允许负数,就要使用64位整数,pascal的int64以及c++的long long。当然也可以特殊处理,不过比较麻烦。

难点

这个题库可能会使用特殊的输入输出方法(例如文件输入),也可能要求提交的时候加入一些附加信息,如果没在这个题库做过题目也没有看帮助,或者以前完全没有使用文件的经验,这可能就是难点。

另外对于一些不自带数字输入输出功能的语言(例如BrainFuck),自己写数字输入输出可能也是比较困难的地方。

另外上面要注意的问题,也可能会让人不小心出错。

评价及扩展

这道题是为了测试输入输出和提交方法用的,没有多少技术含量。

USACOYour Ride Is Here还考察了基本的语法,目的还有测试做题的人会不会编程。而Life, the Universe, and Everything同时也为BrainFuck等语言的使用者考虑了,是一道不需要数字输入输出,什么语言都可以很简单的做出来的题目。另外还有一个经常用来测试的程序:输出Hello World,但是Hello World的程序没有输入部分。

而这道题目的扩展通常只是加入数据范围之类的陷阱,用其他的进制计算高精度数支持操作符之类的。第二、三条通常只是练习题目,最后一条在编译器、解释器之类的很多地方都比较有用,但是这种程序绝大部分都不是关于A+B的内容。

参见

相关