高精度加法乘法

高精度加法&乘法都是把数字转化成数组进行运算,存储

高精度加法

建议多在纸上画画,梳理思路

代码实现

  • 输入字符串
//初始化数组存储
int a[250]={0};
int b[250]={0};
int c[251]={0};
//定义字符串,输入字符串
string s1,s2;
getline(cin,s1);
getline(cin,s2);
  • 字符串转逆序数组

int x=s1.size();
int y=s2.size();
int n=0;
int m=0;
for(int i=x-1;i>=0;i--)//x-1,避免数组越界
{a[n]=s1[i]-'0';//字符转数字n++;
}
for(int i=y-1;i>=0;i--)
{b[m]=s2[i]-'0';m++;
}
  • 数组相加

for(int i=0;i<(x>y?x:y);i++)//以最长的数组为基准{c[i]+=a[i]+b[i];if(c[i]>=10)        //注意进位{c[i+1]+=c[i]/10;c[i]=c[i]%10;}}
  • 逆序输出

if(c[(x>y?x:y)]!=0)           //注意进位输出
{cout<<c[(x>y?x:y)];
}
for(int i=(x>y?x:y)-1;i>=0;i--)//逆序输出
{cout<<c[i];
}

完整代码

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
//输入字符串int a[250]={0};int b[250]={0};int c[250]={0};string s1,s2;getline(cin,s1);getline(cin,s2);
//字符串转逆序数组int x=s1.size();int y=s2.size();int n=0;int m=0;for(int i=x-1;i>=0;i--){a[n]=s1[i]-'0';n++;}for(int i=y-1;i>=0;i--){b[m]=s2[i]-'0';m++;}
//实现加法for(int i=0;i<(x>y?x:y);i++){c[i]+=a[i]+b[i];if(c[i]>=10){c[i+1]+=c[i]/10;c[i]=c[i]%10;}}
//输出if(c[(x>y?x:y)]!=0){cout<<c[(x>y?x:y)];}for(int i=(x>y?x:y)-1;i>=0;i--){cout<<c[i];}return 0;
}

高精度乘法

代码实现

  • 输入字符串
//初始化数组存储
int a[250]={0};
int b[250]={0};
int c[251]={0};
//定义字符串,输入字符串
string s1,s2;
getline(cin,s1);
getline(cin,s2);
  • 字符串转逆序数组
int x=s1.size();
int y=s2.size();
int n=0;
int m=0;
for(int i=x-1;i>=0;i--)//x-1,避免数组越界
{a[n]=s1[i]-'0';//字符转数字n++;
}
for(int i=y-1;i>=0;i--)
{b[m]=s2[i]-'0';m++;
}
  • 循环相乘并相加
for(int i=0;i<x;i++)//两层for循环
{for(int j=0;j<y;j++){c[j+i]+=a[i]*b[j];if(c[j+i]>=10)  //进位{c[j+i+1]+=c[j+i]/10;c[j+i]=c[j+i]%10;}}
}
  • 逆序输出

可以根据科学计数法相乘规律可知,x位整数乘以y位整数,不大于(x+y)位整数

int p=0;
for(int i=x+y-1;i>=0;i--)//确定位数
{if(c[i]!=0){p=i;break;}
}
for(int i=p;i>=0;i--)//逆序输出
{cout<<c[i];
}

完整代码

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
//输入字符串int a[250]={0};int b[250]={0};int c[250]={0};string s1,s2;getline(cin,s1);getline(cin,s2);
//字符串转逆序数组int x=s1.size();int y=s2.size();int n=0;int m=0;for(int i=x-1;i>=0;i--){a[n]=s1[i]-'0';n++;}for(int i=y-1;i>=0;i--){b[m]=s2[i]-'0';m++;}
//乘法运算for(int i=0;i<x;i++){for(int j=0;j<y;j++){c[j+i]+=a[i]*b[j];if(c[j+i]>=10){c[j+i+1]+=c[j+i]/10;c[j+i]=c[j+i]%10;}}}
//逆序输出int p=0;for(int i=x+y-1;i>=0;i--){if(c[i]!=0){p=i;break;}}for(int i=p;i>=0;i--){cout<<c[i];}return 0;
}

烧脑,啊啊啊啊啊啊啊啊啊啊啊啊啊,窝不想思考,窝没有脑子哇哇哇

小应用

用高精度计算出 S=1!+2!+3!+⋯+n!S=1!+2!+3!+⋯+n!(n≤50n≤50)。

#include<iostream>
#include<cstdio>
using namespace std;
int n,a[101]={0},s[101]={0};
void change(int x)        //乘法
{int g=0;for(int i=100;i>=0;i--){a[i]=a[i]*x+g;//进位g=a[i]/10;a[i]=a[i]%10;}
}
void qh()                //加法
{int g=0;for(int i=100;i>=0;i--){s[i]=s[i]+a[i]+g;//进位g=s[i]/10;s[i]=s[i]%10;}
}
void sc()                //输出
{int w;for(int i=0;i<=100;i++){if(s[i]!=0){w=i;break;}}for(int i=w;i<=100;i++)printf("%d",s[i]);
}
int main()
{scanf("%d",&n);s[100]=a[100]=1;for(int i=2;i<=n;i++){change(i);qh();}sc();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/68694.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 列表思维导图

Python 列表思维导图 腾讯云盘下载连接 https://share.weiyun.com/Ri6bUJed

获取snmp oid的小方法1(随手记)

snmpwalk遍历设备的mib # snmpwalk -v <SNMP version> -c <community-id> <IP> . snmpwalk -v 2c -c test 192.168.100.201 .根据获取的值&#xff0c;找到某一个想要的值的oid # SNMPv2-MIB::sysName.0 STRING: test1 [rootzabbix01 fonts]# snmpwalk -v…

【leetcode练习·二叉树】计算完全二叉树的节点数

本文参考labuladong算法笔记[拓展&#xff1a;如何计算完全二叉树的节点数 | labuladong 的算法笔记] 如果让你数一下一棵普通二叉树有多少个节点&#xff0c;这很简单&#xff0c;只要在二叉树的遍历框架上加一点代码就行了。 但是&#xff0c;力扣第第 222 题「完全二叉树的…

【C++语言】卡码网语言基础课系列----5. A+B问题VIII

文章目录 练习题目AB问题VIII具体代码实现 小白寄语诗词共勉 练习题目 AB问题VIII 题目描述&#xff1a; 你的任务是计算若干整数的和。 输入描述&#xff1a; 输入的第一行为一个整数N&#xff0c;接下来N行每行先输入一个整数M&#xff0c;然后在同一行内输入M个整数。 输出…

《大数据时代“快刀”:Flink实时数据处理框架优势全解析》

在数字化浪潮中&#xff0c;数据呈爆发式增长&#xff0c;实时数据处理的重要性愈发凸显。从金融交易的实时风险监控&#xff0c;到电商平台的用户行为分析&#xff0c;各行业都急需能快速处理海量数据的工具。Flink作为一款开源的分布式流处理框架&#xff0c;在这一领域崭露头…

WebStorm安装及配置迁移

一、安装 官方下载安装包 WebStorm&#xff1a;JetBrains 出品的 JavaScript 和 TypeScript IDE 适用于2024版本及以下 按需安装后重启电脑 运行WebStorm,注意不要选择大陆地区&#xff0c;语言不选择中文&#xff0c;运行激活文件 二、配置迁移 根据已有软件导出相关配置…

ARM内核:嵌入式时代的核心引擎

引言 在当今智能设备无处不在的时代&#xff0c;ARM&#xff08;Advanced RISC Machines&#xff09;处理器凭借其高性能、低功耗的特性&#xff0c;成为智能手机、物联网设备、汽车电子等领域的核心引擎。作为精简指令集&#xff08;RISC&#xff09;的典范&#xff0c;ARM核…

离线大模型-通义千问

关部署离线模型的教程就不写了&#xff0c;百度一搜一大堆 Kamailio介绍 1. Kamailio介绍 user: 您了解kamailio吗&#xff1f;assistant: 是的&#xff0c;我了解Kamailio。Kamailio是一个开源的SIP服务器和代理&#xff0c;用于处理VoIP&#xff08;Voice over Internet…

Spring Boot是什么及其优点

简介 Spring Boot是基于Spring框架开发的全新框架&#xff0c;其设计目的是简化Spring应用的初始化搭建和开发过程。 Spring Boot整合了许多框架和第三方库配置&#xff0c;几乎可以达到“开箱即用”。 优点 可快速构建独立的Spring应用。 直接嵌入Tomcat、Jetty和Underto…

FOC核心原理的C语言实现

概述 应用FOC算法&#xff0c;比如无人机、电动汽车或工业电机控制。因此&#xff0c;除了理论&#xff0c;还需要提供实用的实现步骤、常见问题及解决方案&#xff0c;比如如何获取电机的位置信息&#xff08;编码器或传感器&#xff09;&#xff0c;如何处理电流采样&#x…

前端学习-事件委托(三十)

目录 前言 课前思考 for循环注册事件 语法 事件委托 1.事件委托的好处是什么? 2.事件委托是委托给了谁&#xff0c;父元素还是子元素 3.如何找到真正触发的元素 示例代码 总结 前言 才子佳人&#xff0c;自是白衣卿相 课前思考 1.如果同时给多个元素注册事件&…

缩位求和——蓝桥杯

1.题目描述 在电子计算机普及以前&#xff0c;人们经常用一个粗略的方法来验算四则运算是否正确。 比如&#xff1a;248153720248153720 把乘数和被乘数分别逐位求和&#xff0c;如果是多位数再逐位求和&#xff0c;直到是 1 位数&#xff0c;得 24814>145 156 56 而…

万用表使用

目录 0 万用表表盘符号说明 测量功能符号 其他符号 表盘刻度符号 一、万用表的类型和功能 二、万用表的基本功能 三、万用表的使用步骤 四、万用表的注意事项 万用表是一种多功能、多量程的测量仪表,广泛应用于电子电路、电气设备的检测和维修中。以下是万用表的使用方…

Hypium+python鸿蒙原生自动化安装配置

Hypiumpython自动化搭建 文章目录 Python安装pip源配置HDC安装Hypium安装DevEco Testing Hypium插件安装及使用方法​​​​​插件安装工程创建区域 Python安装 推荐从官网获取3.10版本&#xff0c;其他版本可能出现兼容性问题 Python下载地址 下载64/32bitwindows安装文件&am…

细说机器学习算法之ROC曲线用于模型评估

系列文章目录 第一章&#xff1a;Pyhton机器学习算法之KNN 第二章&#xff1a;Pyhton机器学习算法之K—Means 第三章&#xff1a;Pyhton机器学习算法之随机森林 第四章&#xff1a;Pyhton机器学习算法之线性回归 第五章&#xff1a;Pyhton机器学习算法之有监督学习与无监督…

ROS_noetic-打印hello(√)

笔者创建的路径如下 进入到src&#xff0c; catkin_create_pkg helloworld roscpp rospy std_msgs Helloworld-C hello_C.cpp #include "ros/ros.h" int main(int argc, char *argv[]) { //执行 ros 节点初始化 ros::init(argc,argv,"hello"); //创…

冲刺蓝桥杯之速通vector!!!!!

文章目录 知识点创建增删查改 习题1习题2习题3习题4&#xff1a;习题5&#xff1a; 知识点 C的STL提供已经封装好的容器vector&#xff0c;也可叫做可变长的数组&#xff0c;vector底层就是自动扩容的顺序表&#xff0c;其中的增删查改已经封装好 创建 const int N30; vecto…

Golang 并发机制-2:Golang Goroutine 和竞争条件

在今天的软件开发中&#xff0c;我们正在使用并发的概念&#xff0c;它允许一次执行多个任务。在Go编程中&#xff0c;理解Go例程是至关重要的。本文试图详细解释什么是例程&#xff0c;它们有多轻&#xff0c;通过简单地使用“go”关键字创建它们&#xff0c;以及可能出现的竞…

尚硅谷spring框架视频教程——学习笔记一(IOC、AOP)

文章目录 前言一、控制反转&#xff08;IOC&#xff09;1. 底层原理2. 两种实现方式&#xff08;接口&#xff09;3. bean管理&#xff08;基于xml方式&#xff09;4. bean管理&#xff08;基于注解方式&#xff09; 二、面向切面编程&#xff08;AOP&#xff09;1. 底层逻辑2.…

C++并发编程指南07

文章目录 [TOC]5.1 内存模型5.1.1 对象和内存位置图5.1 分解一个 struct&#xff0c;展示不同对象的内存位置 5.1.2 对象、内存位置和并发5.1.3 修改顺序示例代码 5.2 原子操作和原子类型5.2.1 标准原子类型标准库中的原子类型特殊的原子类型备选名称内存顺序参数 5.2.2 std::a…