8 条题解
-
0
哈哈哈,~~~~今天来整活坑萌新啦(bushi) 这道题其实很简单,按照常规套路我们只需要把a和b乘起来就可以了,代码如下
#include<iomanip> #include <bits/stdc++.h> using namespace std; int main() { long long a, b; cin >> a >> b; cout << a * b; return 0; }
但是,身为一个试图让萌新终身难忘的人怎么会那么容易让他用这个代码? 所以我们可以用高精度乘法,代码如下
#include <bits/stdc++.h> using namespace std; long long N, a[100000005]; //高精度乘法 int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> N; a[1] = 1; long long k = 1; // k控制的是最终的计算结果的位数 for (int i = 1; i <= N; i++) { //第一层循环控制的是这是i的几次方 long long temp = 0; // temp控制的是进位 for (int j = 1; j <= k; j++) { a[j] = a[j] * i + temp; //该位就是该位乘2加进位 temp = a[j] / 10; a[j] = a[j] % 10; if (temp != 0 && j == k) k++; //最高位有进位 } } for (int i = k; i >= 1; i--) { cout << a[i]; } return 0; }
是不是还是非常的简单?如果还是觉得不够简单,可以用高精度加法
#include<bits/stdc++.h> using namespace std; string a,b; long long array_a[505], array_b[505], array_c[505]; long long temp, ind; //ind用来标记第1个不是0的位置 //高精度加法 int main() { ios::sync_with_stdio(false); cin.tie(0); cin>>a>>b; long long len_a = a.length(); long long len_b = b.length(); for(int i = 0; i < a.length(); i++) { //倒着把数字放进对应的数组里 array_a[i] = a[len_a - 1 - i] - '0'; } for(int i = 0; i < b.length(); i++) { //倒着把数字放进对应的数组里 array_b[i] = b[len_b - 1 - i] - '0'; } for(int i = 0; i <= max(len_a, len_b); i++) { array_c[i] = array_a[i] + array_b[i] + temp; if(array_c[i] >= 10) { temp = array_c[i] / 10; array_c[i] = array_c[i] % 10; } else { temp = 0; } } for(int i = max(len_a, len_b); i >= 0; i--) { if(array_c[i] != 0) { ind = i; break; } } for(int i = ind; i >= 0; i--) { cout<<array_c[i]; } return 0;
}
整加法出来之后,再用高精度乘法就可以得出结果啦,是不是超级简单?
注意:题解不能抄!题解不能抄!题解不能抄!最后一种方法怎么把加法套上乘法就当是留给萌新们的考验吧
- 1
信息
- ID
- 129
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 3
- 标签
- 递交数
- 186
- 已通过
- 99
- 上传者