模拟与高精度

题目描述

高精度加法,相当于 a+b problem,不用考虑负数

输入格式

分两行输入。a,b≤10500。

输出格式

输出只有一行,代表 a+b 的值。

输入输出样例

输入 #1复制

1
1

输出 #1复制

2

输入 #2复制

1001
9099

输出 #2复制

10100

说明/提示

20% 的测试数据,0≤a,b≤1e9;

40% 的测试数据,0≤a,b≤1e18。

为了方便从低位到高位逐位计算,先将两个字符串反转。

从最低位开始,逐位相加,并处理进位。

如果最后还有进位,将其写入结果的最高位。

反转回正常顺序后,去除结果中的前导零。

如果结果为全零,返回”0“否则返回有效部分。

源代码:

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
// 反转字符串函数
string rever(string str) {
    return string(str.rbegin(), str.rend()); // 使用反向迭代器反转字符串
}
// 大数加法函数
string add(string a, string b) {
    int x, carry = 0; // x 用于存储当前位的和,carry 用于存储进位
    a = rever(a); // 反转字符串 a,方便从低位到高位计算
    b = rever(b); // 反转字符串 b
    string c; // 用于存储结果
    c.resize(max(a.length(), b.length()) + 1, '0'); // 预分配结果空间,多一位用于可能的最高位进位
    a.resize(max(a.length(), b.length()) + 1, '0'); // 补齐 a 的长度,避免越界
    b.resize(max(a.length(), b.length()) + 1, '0'); // 补齐 b 的长度
    for (int i = 0; i < max(a.length(), b.length()); i++) {
        x = a[i] - '0' + b[i] - '0' + carry; // 计算当前位的和(包括进位)
        carry = x / 10; // 计算进位
        c[i] = (x % 10) + '0'; // 存储当前位的结果
    }
    if (carry > 0)
        c[max(a.length(), b.length())] = carry + '0'; // 如果最后还有进位,写入最高位
    c = rever(c); // 反转回正常顺序
    int start = 0;
    while (start < max(a.length(), b.length()) && c[start] == '0')
        start++; // 去除前导零
    c = c.substr(start); // 截取有效部分
    if (c.empty())
        return "0"; // 如果结果为全零,返回 "0"
    return c;
}
int main() {
    string a, b;
    cin >> a >> b;
    cout << add(a, b);
    return 0;
}

题目背景

高精度乘法模板题。

题目描述

给出两个非负整数,求它们的乘积。

输入格式

输入共两行,每行一个非负整数。

输出格式

输出一个非负整数表示乘积。

输入输出样例

输入 #1复制

1
2

输出 #1复制

2

说明/提示

每个非负整数不超过 1e2000。

为了方便从低位到高位逐位计算,先将两个字符串反转。

从最低位开始,逐位相乘,并处理进位。

将每一位的乘积累加到结果字符串的对应位置。

如果最后还有进位,将其写入结果的最高位。

反转回正常顺序后,去除结果中的前导零。

如果结果为全零,返回”0”,否则返回有效部分。

源代码:

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
// 反转字符串函数
string rever(string str) {
    return string(str.rbegin(), str.rend()); // 使用反向迭代器反转字符串
}
// 大数乘法函数
string mul(string a, string b) {
    int x, carry; // x 用于存储当前位的乘积,carry 用于存储进位
    a = rever(a); // 反转字符串 a,方便从低位到高位计算
    b = rever(b); // 反转字符串 b
    string c; // 用于存储结果
    c.resize(a.length() + b.length(), '0'); // 预分配结果空间,长度为 a 和 b 的长度之和
    for (int i = 0; i < a.length(); i++) {
        carry = 0; // 每次外层循环开始时,进位初始化为 0
        for (int j = 0; j < b.length(); j++) {
            x = (a[i] - '0') * (b[j] - '0') + (c[i + j] - '0') + carry; // 计算当前位的乘积和进位
            carry = x / 10; // 计算新的进位
            c[i + j] = (x % 10) + '0'; // 存储当前位的结果
        }
        if (carry > 0)
            c[i + b.length()] = (c[i + b.length()] - '0' + carry) + '0'; // 处理最高位进位
    }
    c = rever(c); // 反转回正常顺序
    int start = 0;
    while (start < c.length() && c[start] == '0')
        start++; // 去除前导零
    c = c.substr(start); // 截取有效部分
    if (c.empty())
        return "0"; // 如果结果为全零,返回 "0"
    return c;
}
int main() {
    string a, b;
    cin >> a >> b;
    cout << mul(a, b);
    return 0;
}

题目描述

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

其中 ! 表示阶乘,定义为 n!=n×(n−1)×(n−2)×⋯×1。例如,5!=5×4×3×2×1=120。

输入格式

一个正整数 n

输出格式

一个正整数 S,表示计算结果。

输入输出样例

输入 #1复制

3

输出 #1复制

9

说明/提示

【数据范围】

对于 100% 的数据,1≤n≤50。

前面已经介绍了高精度乘法和加法,这里就直接使用上面的乘法和加法函数,只需要再写一个求阶乘的函数,再通过循环求和就行了

源代码:

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int n;
string rever(string str) {
	return string(str.rbegin(), str.rend());
}
string mul(string a, string b);
string add(string a, string b);
string jc(int n) {
	string a = "1";
	for (int i = 0; i < n; i++) {
		string b = to_string(i + 1);//将整形或者浮点型转换成对应的字符串
		a = mul(a, b);
	}
	return a;
}
int main() {
	cin >> n;
	string c = "0";
	for (int i = 1; i <= n; i++)
		c = add(c, jc(i));
	cout << c;
	return 0;
}
string mul(string a, string b) {
	int x, carry;
	a = rever(a);
	b = rever(b);
	string c;
	c.resize(a.length() + b.length(), '0');
	for (int i = 0; i < a.length(); i++) {
		carry = 0;
		for (int j = 0; j < b.length(); j++) {
			x = (a[i] - '0') * (b[j] - '0') + (c[i + j] - '0') + carry;
			carry = x / 10;
			c[i + j] = (x % 10) + '0';
		}
		if (carry > 0)
			c[i + b.length()] = (c[i + b.length()] - '0' + carry) + '0';
	}
	c = rever(c);
	int start = 0;
	while (start < c.length() && c[start] == '0')
		start++;
	c = c.substr(start);
	if (c.empty())
		return "0";
	return c;
}
string add(string a, string b) {
	int x, carry = 0;
	a = rever(a);
	b = rever(b);
	string c;
	c.resize(max(a.length(), b.length()) + 1, '0');
	a.resize(max(a.length(), b.length()) + 1, '0');
	b.resize(max(a.length(), b.length()) + 1, '0');
	for (int i = 0; i < max(a.length(), b.length()); i++) {
		x = a[i] - '0' + b[i] - '0' + carry;
		carry = x / 10;
		c[i] = (x % 10) + '0';
	}
	if (carry > 0)
		c[max(a.length(), b.length())] = carry + '0';
	c = rever(c);
	int start = 0;
	while (start < max(a.length(), b.length()) && c[start] == '0')
		start++;
	c = c.substr(start);
	return c;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VsCode美化 Json

1.扩展中输入:pretty json 2. &#xff08;CtrlA&#xff09;选择Json文本 示例:{ "name" : "runoob" , "alexa" :10000, "site" : null , "sites" :[ "Google" , "Runoob" , "T…

当一个后端下载了一个VUE开源项目,怎么开始着手玩一下

当后端想玩一玩前端的时候 写在前面1、你需要安装、学习的东西2、开始一个项目2.1、用vs code打开项目目录2.2、安装项目依赖2.3、启动项目 3、新建一个你自己的页面4、element怎么用 写在前面 这里给你的角色是一个后端开发工程师&#xff0c;会一点浅薄的前端三大件&#xf…

以太网详解(八)传输层协议:TCP/UDP 协议

文章目录 传输层协议概述为什么需要传输层&#xff1f;传输层功能网络层与传输层在实现 “端到端” 传输的异同两类服务:面向连接/无连接服务 传输控制协议 TCPTCP 协议数据单元格式TCP 的重传机制快重传和快恢复快重传举例快恢复算法 用户数据报协议 UDPUDP 概述UDP 基本工作过…

Git是什么

简单介绍&#xff1a; Git是一个分布式版本控制系统&#xff0c;用于跟踪文件的更改&#xff0c;特别是在多人协作开发的环境中。 Key: 分布式 版本控制 系统 最常用于软件开发&#xff0c;但也可以用于管理任何类型的文件和文件夹。 Git帮助团队跟踪和管理文件的历史版本&a…

蓝星旋钮烧录底座组装说明

烧录底座pcb为群内清秋设计&#xff0c;感谢大佬开源 效果展示 指示灯明亮 可安装60mm硅胶防滑垫 话不多说&#xff0c;演示组装过程

Comsol 双层带穿孔多孔材料背衬的穿孔板的吸声:亥姆霍兹共振腔的能量耗散

提出了一种新型的低频吸声赫尔姆霍兹共振器&#xff0c;它由两个带孔的刚性面板和一个逐渐带孔的多孔材料背衬组成。通过使用双重孔隙理论将结构划分为多层系统&#xff0c;开发了一个理论模型&#xff0c;该模型通过有限元模拟和实验测量得到验证。研究了所提出的声学超材料的…

前OpenAI CTO Mira Murati创办AI新公司

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

23. AI-大语言模型-DeepSeek赋能开发-Spring AI集成

文章目录 前言一、Spring AI 集成 DeepSeek1. 开发AI程序2. DeepSeek 大模型3. 集成 DeepSeek 大模型1. 接入前准备2. 引入依赖3. 工程配置4. 调用示例5. 小结 4. 集成第三方平台&#xff08;已集成 DeepSeek 大模型&#xff09;1. 接入前准备2. POM依赖3. 工程配置4. 调用示例…

侯捷 C++ 课程学习笔记:STL 标准库与泛型编程的实战指南

在侯捷老师的 C 系列课程中&#xff0c;《STL 标准库与泛型编程》这门课程让我对 C 的强大工具——标准模板库&#xff08;STL&#xff09;有了全新的认识。STL 是现代 C 编程的核心&#xff0c;它提供了丰富的数据结构、算法和迭代器&#xff0c;极大地简化了开发工作。侯捷老…

【数据结构初阶第十二节】设计循环队列

云边有个稻草人-CSDN博客 必须有为成功付出代价的决心&#xff0c;然后想办法付出这个代价。 还有最后一道关于队列的习题&#xff0c;这题有点难&#xff0c;准备好迎接挑战吧&#xff01; 目录 1.【题目】 2.实现循环队列推荐用数组&#xff0c;Why? 3.Q1&#xff1a;如…

Git使用[同一电脑多个账户ssh-key的管理]

同一电脑多个账户ssh-key的管理 现在遇到一个问题,我同一台电脑既要通过VPN访问内网的git也要访问对外释放的gitee,刚开始我直接把原来的SSH-key添加到内网的gitlab发现可以访问,但是后来再方位外网的gitee就出问题了,看来要换一种手段才行 本文引用&#xff1a;https://cloud…

Ubuntu:20.04更新cmake到更高版本

从输出信息可以看出&#xff0c;您当前的系统中已经安装了 cmake&#xff0c;但版本是 3.16.3&#xff0c;而您的项目需要 CMake 3.18 或更高版本。默认情况下&#xff0c;Ubuntu 20.04 的官方软件仓库中提供的 CMake 版本较低&#xff08;如 3.16.3&#xff09;&#xff0c;因…

解锁 AIoT 无限可能,乐鑫邀您共赴 Embedded World 2025

2025 年 3 月 11-13 日&#xff0c;全球规模最大的嵌入式展览会——Embedded World 2025 将在德国纽伦堡盛大开幕。作为物联网和嵌入式技术领域的领先企业&#xff0c;乐鑫信息科技 (688018.SH) 将展示在 AI LLM、HMI、双频 Wi-Fi 6、低功耗 MCU 和 Matter 等领域的最新技术及解…

《[含文档+PPT+源码等]精品基于Python实现的Django中药材在线学习系统的设计与实现

基于Python实现的Django中药材在线学习系统的设计与实现背景&#xff0c;可以从以下几个方面进行阐述&#xff1a; 一、行业背景 随着中医药在全球范围内的不断推广和普及&#xff0c;中药材的知识普及和在线学习需求日益增长。传统的中药材学习方式往往受限于地域、时间和资…

EXCEL解决IF函数“您已为此函数输入太多个参数”的报错

IF函数的基本结构是IF(条件, 值为真时的结果, 值为假时的结果)&#xff0c;所以标准的IF函数最多只能有三个参数。当用户输入的参数超过三个时&#xff0c;Excel就会报这个错误。比如多个IF语句叠加&#xff0c;但可能在嵌套的过程中没有正确关闭每个IF函数的括号&#xff0c;导…

总结单例模式的写法(在线程安全的情况下)

目录 1 饿汉模式 2 懒汉模式 3 分析 啥是设计模式? 设计模式好⽐象棋中的 "棋谱". 红⽅当头炮, ⿊⽅⻢来跳. 针对红⽅的⼀些⾛法, ⿊⽅应招的时候有⼀ 些固定的套路. 按照套路来⾛局势就不会吃亏. 软件开发中也有很多常⻅的 "问题场景". 针对这些问题…

神经网络|(十)概率论基础知识-正态分布及python仿真

【1】引言 前序学习进程中&#xff0c;已经掌握了二项分布、泊松分布相关知识及其python仿真技巧&#xff0c;相关文章链接为&#xff1a; 神经网络|(八)概率论基础知识-二项分布及python仿真-CSDN博客 神经网络|(九)概率论基础知识-泊松分布及python仿真-CSDN博客 在此基础…

centos8 使用yum安装程序出现报错

在执行yum指令出现源更新不了Could not resolve host: mirrorlist.centos.org&#xff1b; Unknown error问题 yum -y update结果 Errors during downloading metadata for repository appstream: - Curl error (6): Couldnt resolve host name for http://mirrorlist.centos…

MSI微星电脑冲锋坦克Pro Vector GP76 12UGS(MS-17K4)原厂Win11系统恢复镜像,含还原功能,预装OEM系统下载

适用机型&#xff1a;【MS-17K4】 链接&#xff1a;https://pan.baidu.com/s/1P8ZgXc6S_J9DI8RToRd0dQ?pwdqrf1 提取码&#xff1a;qrf1 微星笔记本原装出厂WINDOWS11系统自带所有驱动、出厂主题壁纸、系统属性专属联机支持标志、Office办公软件、MSI Center控制中心等预装…

手机控制电脑远程关机

远程看看软件兼容iOS和Android设备&#xff0c;该软件除了能通过电脑远程关闭另一台电脑外&#xff0c;您还可以通过它在手机上远程关闭公司的电脑。您可以按照以下步骤进行操作以实现电脑远程关机&#xff1a; 步骤1.在手机应用商店搜索“远程看看”进行软件安装&#xff0c;…