网站建设标准规范,如何用word做简单的网站,wordpress无法访问图片,dream8网站建设教程视频文章目录 2025-6-10-C 学习 模拟与高精度#xff08;1#xff09;P1601 AB Problem#xff08;高精#xff09;题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1 输入输出样例 #2输入 #2输出 #2 说明/提示提交代码 P1303 A*B Problem题目背景题目描述输入格式输出格… 文章目录 2025-6-10-C 学习 模拟与高精度1P1601 AB Problem高精题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1 输入输出样例 #2输入 #2输出 #2 说明/提示提交代码 P1303 A*B Problem题目背景题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1 说明/提示提交代码 P1009 [NOIP 1998 普及组] 阶乘之和题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1 说明/提示提交代码 小结 2025-6-10-C 学习 模拟与高精度1 高精度加法 高精度乘法 高阶阶乘。
P1601 AB Problem高精
题目描述
高精度加法相当于 ab problem不用考虑负数。
输入格式
分两行输入。 a , b ≤ 10 500 a,b \leq 10^{500} a,b≤10500。
输出格式
输出只有一行代表 a b ab ab 的值。
输入输出样例 #1
输入 #1
1
1输出 #1
2输入输出样例 #2
输入 #2
1001
9099输出 #2
10100说明/提示 20 % 20\% 20% 的测试数据 0 ≤ a , b ≤ 10 9 0\le a,b \le10^9 0≤a,b≤109 40 % 40\% 40% 的测试数据 0 ≤ a , b ≤ 10 18 0\le a,b \le10^{18} 0≤a,b≤1018。
提交代码
#include iostream
#include vector
#include string
using namespace std;vectorint add(const vectorint a, const vectorint b)
{vectorint result;int carry 0;// size_t 很重要for(size_t k1 0; k1 a.size() || k1 b.size() || carry; k1){int cur carry;if(k1 a.size()){cur a[k1];}if(k1 b.size()){cur b[k1];}result.push_back(cur % 10);carry cur / 10;}return result;
}int main()
{string strA,strB;cin strA strB;vectorint a,b,ans;// 逆序存储数字确保低位在前例如123存储为[3,2,1]for(int i strA.size() - 1; i 0; --i)a.push_back(strA[i] - 0);for(int i strB.size() - 1; i 0; --i)b.push_back(strB[i] - 0);ans add(a, b);for(int i ans.size() - 1; i 0; --i)cout ans[i];cout endl;return 0;
}P1303 A*B Problem
题目背景
高精度乘法模板题。
题目描述
给出两个非负整数求它们的乘积。
输入格式
输入共两行每行一个非负整数。
输出格式
输出一个非负整数表示乘积。
输入输出样例 #1
输入 #1
1
2输出 #1
2说明/提示
每个非负整数不超过 10 2000 10^{2000} 102000。
提交代码
#include iostream
#include vector
#include string
using namespace std;// 高精度乘法a * ba和b低位在前存储
vectorint multiply(const vectorint a, const vectorint b)
{// 结果最多a.size()b.size()位vectorint result(a.size() b.size(), 0); for (int k1 0; k1 a.size(); k1) {int carry 0;int digit1 a[k1];for (int k2 0; k2 b.size() || carry; k2) {int curPos k1 k2;int digit2 (k2 b.size()) ? b[k2] : 0;int product result[curPos] digit1 * digit2 carry;result[curPos] product % 10;carry product / 10;}}// 去除前导零while (result.size() 1 result.back() 0) {result.pop_back();}return result;
}int main()
{string strA,strB;cin strA strB;vectorint a,b,ans;// 逆序存储数字确保低位在前例如123存储为[3,2,1]for(int i strA.size() - 1; i 0; --i)a.push_back(strA[i] - 0);for(int i strB.size() - 1; i 0; --i)b.push_back(strB[i] - 0);ans multiply(a, b);for(int i ans.size() - 1; i 0; --i)cout ans[i];cout endl;return 0;
}P1009 [NOIP 1998 普及组] 阶乘之和
题目描述
用高精度计算出 S 1 ! 2 ! 3 ! ⋯ n ! S 1! 2! 3! \cdots n! S1!2!3!⋯n! n ≤ 50 n \le 50 n≤50。
其中 ! 表示阶乘定义为 n ! n × ( n − 1 ) × ( n − 2 ) × ⋯ × 1 n!n\times (n-1)\times (n-2)\times \cdots \times 1 n!n×(n−1)×(n−2)×⋯×1。例如 5 ! 5 × 4 × 3 × 2 × 1 120 5! 5 \times 4 \times 3 \times 2 \times 1120 5!5×4×3×2×1120。
输入格式
一个正整数 n n n。
输出格式
一个正整数 S S S表示计算结果。
输入输出样例 #1
输入 #1
3输出 #1
9说明/提示
【数据范围】
对于 100 % 100 \% 100% 的数据 1 ≤ n ≤ 50 1 \le n \le 50 1≤n≤50。
提交代码 这里乘法取了一个巧两个乘数有一个位数较少。
#include bits/stdc.h
using namespace std;// 高精度乘法
vectorint multiply(const vectorint nums, int multiplier)
{vectorint result;int carry 0;// 进位标志位for(int i 0; i nums.size() || carry; i){long long cur carry;if(i nums.size()){cur nums[i] * multiplier;}result.push_back(cur % 10);carry cur / 10;}return result;
}// 高精度加法
vectorint add(const vectorint a, const vectorint b)
{vectorint result;int carry 0;for(int i 0;i a.size() || i b.size() || carry; i){int cur carry;if(i a.size()){cur a[i];}if (i b.size()){cur b[i];}result.push_back(cur % 10);carry cur / 10;}return result;
}// 结果输出
void printNumber(const vectorint nums)
{for(int i nums.size() - 1; i 0; --i){cout nums[i];}cout endl;
}int main() {int n;cin n;vectorint sum {0};vectorint factorial {1};for (int i 1; i n; i) {// 计算当前数的阶乘factorial multiply(factorial, i);// 将当前阶乘累加到总和中sum add(sum, factorial);}// 输出结果printNumber(sum);return 0;
}
小结
做个小结这三道题一起做真的不错完全就是在模拟 计算的竖式过程。
可参考下面的内容展开说一下乘法的过程。 1 2 3 (a: [3,2,1])× 4 5 (b: [5,4])-------6 1 5 (3×515, 3×412 → 15120135)4 9 2 (2×510, 2×48 → 108090左移一位)
1 2 3 (1×55, 1×44 → 54045左移两位)-------5 5 3 5 (结果: 5535)