【B2001】入门测试题目
一看,这不高精度吗
上代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
template<typename T>
inline void write(T x) {
if (x < 0)x = (~x) + 1, putchar('-');
if (x / 10)write(x / 10);
putchar(x % 10 | 48);
}
void swap(char *a, int i, int j) {
char t = a[i] - '0';
a[i] = a[j] - '0';
a[j] = t;
}
int fa, fb;
void add(char *a, char *b) {
int la = strlen(a), lb = strlen(b);
int i, j, c = 0, s, l;
for (i = fa, j = la - 1; i <= j; ++i, --j)swap(a, i, j);
for (i = fb, j = lb - 1; i <= j; ++i, --j)swap(b, i, j);
for (i = fa; i < la || i < lb; ++i) {
s = a[i] + b[i] + c;
c = s / 10;
a[i] = s % 10;
}
a[i] = c;
l = c ? i : i - 1;
if (fa)printf("-");
for (i = l; i >= fa; --i)write(a[i]);
}
int cmp(char *a, char *b) {
int i, j, la, lb;
la = strlen(a);
lb = strlen(b);
if (la - fa > lb - fb)return 1;
else if (la - fa < lb - fb)return 0;
else {
for (i = 0; i < la && a[i + fa] == b[i + fb]; ++i);
return a[i + fa] > b[i + fb];
}
}
void minus(char *a, char *b) {
char *t;
int i, j, ft, la, lb, c, l, s;
if (!cmp(a, b)) {
t = a;
a = b;
b = t;
ft = fa;
fa = fb;
fb = ft;
}
la = strlen(a);
lb = strlen(b);
for (i = fa, j = la - 1; i <= j; ++i, --j)swap(a, i, j);
for (i = fb, j = lb - 1; i <= j; ++i, --j)swap(b, i, j);
c = 0;
l = -1;
for (i = 0; i + fa < la; ++i) {
s = a[i + fa] - b[i + fb] - c >= 0 ? 0 : 1;
a[i + fa] = (10 + a[i + fa] - b[i + fb] - c) % 10;
l = a[i + fa] ? i + fa : l;
c = s;
}
if (l < 0)printf("0");
else {
if (fa)printf("-");
for (i = l; i >= fa; --i)write(a[i]);
}
}
char A[10005];
char B[10005];
int main() {
scanf("%s%s", A, B);
fa = ('-' == A[0]);
fb = ('-' == B[0]);
if (fa ^ fb)minus(A, B);
else add(A, B);
return 0; //好习惯*1
}
咳咳,开个玩笑
直接输入两个数然后相加就行
给新手的提示:
cin的格式为
cin >> n;
cout为
cout << n << endl;
其中endl是换行控制符
主程序中每行代码末尾加上";"
程序结束加上
return 0;
特别要注意数据范围
用int会溢出
再送一句话
十年OI一场梦
不开longlong见祖宗
AC代码
#include <iostream> //头文件
using namespace std; //一定要写
long long a, b; //再说一次,十年OI一场梦,不开long long见祖宗
int main() { //主函数
cin >> a >> b; //输入
cout << a + b << endl; //输出
return 0; //好习惯*2
//完美结束
}
【B2002】Hello,World!
梦的开始好吧
直接输出就行
注意如果你错了,可能是因为你用了中文标点
AC代码
#include<iostream>
using namespace std;
int main()
{
cout << "Hello,World!";
return 0; //好习惯*3
}
*这里介绍两个函数
scanf("输入控制符", &输入参数);//输入函数
printf("输出控制符", 输出参数);//输出函数
它们在头文件stdio.h或cstdio中
用scanf和printf实现将一个在int取值范围内的整数输入后再输出,代码如下
#include <stdio.h>
using namespace std;
int a;
int main() {
scanf("%d", &a); //%d为控制符
printf("%d", a);
return 0; //好习惯*4
}
关于其他数据类型使用的控制符具体看这
【B2003】输出第二个整数
这个没啥好说的
上代码
#include <stdio.h>
using namespace std;
int a, b, c;
int main() {
scanf("%d%d%d", &a, &b, &c);
printf("%d", b);
return 0; //好习惯*5
}
这里我使用的是scanf和printf来输入输出
因为scanf和printf的速度要比cin和cout更快,所以我推荐大家用scanf和printf
用cin和cout的代码
#include <iostream>
using namespace std;
int a, b, c;
int main() {
cin >> a >> b >> c;
cout << b <<endl;
return 0; //好习惯*6
}