当前位置: 首页 > news >正文

C++知识点总结(6):高精度乘法真题代码

一、高精度数 × 低精度数

#include <iostream>
#include <cstring>
using namespace std;int main()
{// 存储并输入两个数字 char a_str[1005] = {};long long b;cin >> a_str >> b;// 特例先行:结果是0的情况if (a == 0 || b == 0){cout << 0;return 0;} // 转换第一个高精度数 int a[1005] = {};int len_a = strlen(a_str);for (int i = 0; i <= len_a-1; i++){a[len_a-i-1] = a_str[i] - 48;}// 计算int len_ans = len_a;long long ans[1005] = {};long long in = 0;for (int i = 0; i <= len_ans-1; i++){ans[i] = a[i] * b + in; // 存储数字 in = ans[i] / 10; // 得到进位 ans[i] %= 10; // 在对应的数位上保留实际得数的最后一位 }// 输出结果 while (in > 0) // 最高位处理 {ans[len_ans] = in % 10;len_ans++;in /= 10;}// 正常输出 for (int i = len_ans - 1; i >= 0; i--){cout << ans[i]; }return 0;
}

二、高精度数 × 高精度数

#include <iostream>
#include <cstring>
using namespace std;int main()
{// 存储并输入两个数字 char a_str[1005] = {};char b_str[1005] = {};cin >> a_str >> b_str;// 转换高精度数 int a[1005] = {};int b[1005] = {};int len_a = strlen(a_str);int len_b = strlen(b_str);for (int i = 0; i <= len_a-1; i++){a[len_a-i-1] = a_str[i] - 48;}for (int i = 0; i <= len_b-1; i++){b[len_b-i-1] = b_str[i] - 48;}// 计算int ans[2010] = {};int in = 0;for (int j = 0; j <= len_b-1; j++){for (int i = 0; i <= len_a-1; i++){ans[i+j] = a[i] * b[j] + in + ans[i+j];in = ans[i+j] / 10;ans[i+j] %= 10; } // 最高位处理 ans[len_a+j] = in;in = 0; // 重置进位}// 正常输出int len_ans = len_a + len_b; // 结果的最大位数// 前导0while (ans[len_ans-1] == 0 && len_ans > 1){len_ans--;}for (int i = len_ans - 1; i >= 0; i--){cout << ans[i]; }return 0;
}

 三、高精度数的平方

#include <iostream>
#include <cstring>
using namespace std;int main()
{// 存储并输出两个数字 char a_str[1005] = {};char b_str[1005] = {};cin >> a_str;strcpy(b_str, a_str);// 转换高精度数 int a[1005] = {};int b[1005] = {};int len_a = strlen(a_str);int len_b = strlen(b_str);for (int i = 0; i <= len_a-1; i++){a[len_a-i-1] = a_str[i] - 48;}for (int i = 0; i <= len_b-1; i++){b[len_b-i-1] = b_str[i] - 48;}// 计算int ans[2010] = {};int in = 0;for (int j = 0; j <= len_b-1; j++){for (int i = 0; i <= len_a-1; i++){ans[i+j] = a[i] * b[j] + in + ans[i+j];in = ans[i+j] / 10;ans[i+j] %= 10; } // 最高位处理 ans[len_a+j] = in;in = 0; // 重置进位}// 正常输出int len_ans = len_a + len_b; // 结果的最大位数// 前导0while (ans[len_ans-1] == 0 && len_ans > 1){len_ans--;}for (int i = len_ans - 1; i >= 0; i--){cout << ans[i];}return 0;
}

四、高精度阶乘

#include <iostream>
#include <cstring>
using namespace std;int main()
{// 输入int n;cin >> n;// 初始化计算相关变量 int in = 0;int ans[10005] = {1};int len_ans = 1;// 计算阶乘for (int num = 1; num < n; num++) // num是对应的因数 {// 高精度数 ×低精度数代码 for (int i = 0; i <= len_ans-1; i++) {ans[i] = ans[i] * num + in; // ans[i] = 上一轮的结果 * 下一个因数 + 上一次的进位 in = ans[i] / 10;ans[i] %= 10;}while (in){ans[len_ans] = in % 10;len_ans++;in /= 10;}}for (int i = 1; i <= len_ans; i++){cout << ans[i];}return 0;
} 

建议结合课程学习:

戳进课程入口>>

http://www.lryc.cn/news/234896.html

相关文章:

  • Polygon zkEVM的Dragon Fruit和Inca Berry升级
  • 【计算机网络学习之路】网络基础1
  • HTTP/2.0协议详解
  • Python中的Random模块详解:生成随机数与高级应用
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • 【设计一个缓存--针对各种类型的缓存】
  • Django部署时静态文件配置的坑
  • Android---网络编程优化
  • 《算法通关村——不简单的字符串转换问题》
  • 给VSCode插上一双AI的翅膀
  • 2023年亚太杯数学建模思路 - 案例:异常检测
  • 机器学习的医疗乳腺癌数据的乳腺癌疾病预测
  • 解析:什么是生成式AI?与其他类型的AI有何不同?
  • 国产化项目改造:使用达梦数据库和东方通组件部署,前后端分离框架
  • Nginx实现负载均衡
  • SpringCloud 2022有哪些变化
  • 如何快速本地搭建悟空CRM结合内网穿透工具高效远程办公
  • Docker打包Python项目
  • 【Java并发编程一】并发与并行
  • MFC/QT 一些快忘记的细节:
  • 在服务器上部署MVC 6应用程序
  • golang学习笔记——斐波纳契数列
  • 学习raft协议(1)
  • SpringSecurity+jwt使用
  • html-网站菜单-点击显示导航栏
  • 【C++函数的进化】函数指针,模板,仿函数,lambda表达式
  • 云服务器windows service2022 部署git服务器
  • Linux_Docker修改Docker Root Dir
  • 解决requests 2.28.x版本SSL错误:证书验证失败
  • 【开源】基于Vue.js的开放实验室管理系统的设计和实现