Peter算法小课堂—高精度加法

news/2024/7/24 4:46:02 标签: 算法

指针与数组

看看以下代码,请预测答案

#include <bits/stdc++.h>
using namespace std;
int x[10]={0,1,2,3,4,5,6,7,8,9};
int main(){
	cout<<x<<endl;
	cout<<x+3<<endl;
	cout<<*x<<endl;
	cout<<*(x+7)<<endl;
	cout<<(x+4)[1]<<endl;
	return 0;
}

解答:

1.x为x[]数组第一个元素的地址

2.x+3为x[]数组第四个元素的地址

3.*x为数组第一个元素

4.*(x+7)为数组第8个元素

5.(x+4)[1]为第5个元素后面一个元素 

x+y问题

函数总览:

1.converts() 字符串转为高精度大数

2.add() 将两个高精度大数相加(类似竖式)

3.print() 输出一个高精度大数(删除前导0)

4.main()主函数 调用函数

main()

输入两个字符串,用converts转化为x[]与y[],再用add模拟竖式将两数相加,print输出

代码:

string s1,s2;
cin>>s1>>s2;
converts(x,s1);
converts(y,s2);
add(x,y);
print(x);

相信大家应该看得懂吧

converts()

先给代码

void converts(int *a,string s){
	int i,len=s.size();
	for(i=0;i<len;i++) a[i]=s[len-i-1]-'0';
	for(;i<SIZE;i++) a[i]=0;
}

注意事项:

1.i定义在循环外,不能for(int i=0;i<len;i++)

2.len-i-1不能忘记减1

3.字符转整数要-'0'

*第四行代码有的童鞋看不懂,我解释下哈,这里因为i定义过了,省略int i=这一部分

add()

发现别的大佬都写了好长一段代码,我只需要7行代码解决add()

上代码,

void add(int *a,int *b,int len=SIZE){
	for(int i=0;i<len;i++)
		if((a[i]+=b[i])>=10){
			a[i+1]++;
			a[i]-=10;
		}
}

思路:遍历每一位,将两个数相加,若大于10,则进位

*搅得有的小彭友看不懂第3行,我来解释下,这里是先a[i]+=b[i],再把结果与10比较

print()

易错点就删除前导0吧,其他没什么了……

void print(int *a){
	int i;
	for(i=SIZE-1;i>0;i--) if(a[i]>0) break;
	for(;i>=0;i--) cout<<a[i];
	cout<<endl;
}

大家想看一个小视频吗,👇

[C++] 高精加法😎🕵️‍♂️算法详解❗_哔哩哔哩_bilibili

x+y+z问题

#include <bits/stdc++.h>
using namespace std;
#define SIZE 550
int x[SIZE],y[SIZE],z[SIZE];
void converts(int *a,string s){
	int i,len=s.size();
	for(i=0;i<len;i++) a[i]=s[len-i-1]-'0';
	for(;i<SIZE;i++) a[i]=0;
}
void add(int *a,int *b,int len=SIZE){
	for(int i=0;i<len;i++)
		if((a[i]+=b[i])>=10){
			a[i+1]++;
			a[i]-=10;
		}
}
void print(int *a){
	int i;
	for(i=SIZE-1;i>0;i--) if(a[i]>0) break;
	for(;i>=0;i--) cout<<a[i];
	cout<<endl;
}
int main(){
    freopen("plus.in","r",stdin);
    freopen("plus.out","w",stdout);
	string s1,s2,s3;
	cin>>s1>>s2>>s3;
	converts(x,s1);
	converts(y,s2);
	converts(z,s3);
	add(x,y);
	add(x,z);
	print(x);
	return 0;
}

希望这些对大家有用,三连必回

https://blog.csdn.net/qq_51184727/article/details/129971145 ←看得见吗


http://www.niftyadmin.cn/n/5212295.html

相关文章

软文写作如何布局?媒介盒子分享三大类型

好的软文需要有清晰的结构和流畅的语言&#xff0c;让读者能够很快理解和接受文案的内容&#xff0c;因此在写文案之前&#xff0c;需要先列出思路和框架&#xff0c;明确文案的主题和重点&#xff0c;选择合适的语言和表达方式。让文案更加生动易懂&#xff0c;下面就让媒介盒…

浏览器是什么

浏览器是什么 本文简要介绍浏览器的功能和组成。 浏览器&#xff08;Web Browser&#xff09;是一种用于访问和浏览互联网上的网页和资源的软件应用程序。它是用户与互联网交互的主要工具之一。 浏览器通过使用网络协议&#xff08;如HTTP、HTTPS等&#xff09;与远程服务器通…

电源控制系统架构(PCSA)之电源状态层级

目录 5.2 电源状态层级 5.2.1 Core电源状态 5.2.2 Cluster的电源状态 5.2.3 设备电源状态 5.2.4 SOC电源状态 5.2 电源状态层级 电源状态可以组织为电源状态表的层次结构。每个电源状态表描述在其层次结构级别上可用的电源状态。 从系统级电源控制的角度来看&#xff0c…

ElasticSearch之虚拟内存

查看当前Linux系统中vm.max_map_count变量的值&#xff0c;命令如下&#xff1a; sysctl vm.max_map_count执行结果的样例&#xff0c;如下&#xff1a; vm.max_map_count 65530修改参数vm.max_map_count的值&#xff0c;命令如下&#xff1a; sysctl -w vm.max_map_count2…

Java实现求最大值

1 问题 接收用户输入的3个整数&#xff0c;如何将最大值作为结果输出。 2 方法 采用“截图文字代码”的方式描述。 引入输入包调用main()函数&#xff0c;提示并接收用户输入的3个整数&#xff0c;并交由变量a b c来保存。对接收的3个数据进行比较&#xff0c;先比较a和b&#…

ubuntu环境删除qtcreator方法

文章目录 方法1方法2方法3参考不同的安装方法,对应不同的删除方法 方法1 apt-get或者dpkg 方法2 QtCreatorUninstaller 方法3 MaintenanceTool

服务器被入侵了怎么去排查

在当今数字化时代&#xff0c;网络安全问题变得越来越重要。其中&#xff0c;服务器被入侵是一种常见的安全威胁。当服务器被入侵时&#xff0c;我们需要采取一系列措施来排查和解决问题。本文将为您提供服务器被入侵后的排查步骤。 第一步&#xff1a;确认服务器被入侵 当发现…

【cppcheck 静态代码分析工具使用教程】

cppcheck 是一个流行的静态代码分析工具,用于 C 和 C++ 程序。它可以帮助检测代码中的错误、未定义的行为、内存泄漏等。在 Ubuntu 系统上使用 cppcheck 的基本步骤和示例如下: 文章目录 安装 `cppcheck`使用 `cppcheck`基本用法选项示例集成到 IDE注意事项安装 cppcheck 打开…