7 条题解
-
1
T2 a+b的
题解对于初学者,我们可以使用心算
(
cout<<a+b<<endl;)。而这是利用数组模拟现实中的竖式计算完成的加法。
是的没错就是你小学学的那个在这篇代码里我使用了函数,所以逐个函数进行解析:一,
void clear(int a[]): 就像它的名字一样, 函数的作用是清空数组。二,
void read(int a[]): 定义一个字符串 ,通过字符串类型数值对字符'0'做减法来把读入的字符串转化成数字,存到 数组里去。三,
void print(int a[]): 相信对C语言以及C与C++相通的部分有所了解的同学们一定对printf()这个函数不陌生吧,这里 就是对答案先加上一个字符'0',再用putchar()从标准输出输出一个字符串答案。四,
add(int a[], int b[], int c[])高精度加法的核心,将字符串 , 通过模拟竖式计算做加法,把答案存在数组 里面。#include<bits/stdc++.h> using namespace std; const int len = 1000004; int a[len], b[len], c[len]; void clear(int a[]) { for (int i = 0; i < len; ++i) a[i] = 0; } void read(int a[]) { static char s[len + 1]; scanf("%s", s); clear(a); int len = strlen(s); for (int i = 0; i < len; ++i) a[len - i - 1] = s[i] - '0'; } void print(int a[]) { int i; for (i = len - 1; i >= 1; --i) if (a[i] != 0) break; for (; i >= 0; --i) putchar(a[i] + '0'); putchar('\n'); } void add(int a[], int b[], int c[]) { clear(c); for (int i = 0; i < len - 1; ++i) { c[i] += a[i] + b[i]; if (c[i] >= 10) { c[i + 1] += 1; c[i] -= 10; } } } int main() { read(a); read(b); add(a, b, c); print(c); return 0; } //by hina //BlueArchive!高精度好玩捏 -
-3
解析:大小超过short!时间复杂度超过O(0)!输入输出格式无法理解!这道题十分难,应该是道黑题,所以看到数学的标签,我就知道这题可以用二进制,上代码:
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> #include <vector> #include <queue> #include <stack> #include <set> #include <map> #include <unordered_set> #include <unordered_map> #include <cmath> #include <cstdlib> #include <ctime> #include <climits> #include <cctype> #include <cassert> #include <numeric> #include <functional> #include <bitset> #include <deque> #include <list> #include <tuple> #include <utility> #include <iterator> #include <sstream> #include <fstream> #include <iomanip> #include <limits> #include <chrono> #include <random> #include <cstdint> #include <cstddef> #include <cfloat> #include <cwchar> #include <array> #include <memory> using namespace std; long long bi(long long x,long long y){ long long res; long long temp; long long carry; while(true){ res=x^y; temp=x&y; carry=temp<<1; if(carry==0){ break; } x=res; y=carry; } return res; } int main(){ long long a; long long b; cin>>a; cin>>b; cout<<bi(a,b)<<endl; return 0; }
- 1
信息
- ID
- 2
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 1
- 标签
- 递交数
- 630
- 已通过
- 278
- 上传者