IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数组形式的整数加法 -> 正文阅读

[数据结构与算法]数组形式的整数加法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

题干:

1.思路是这样的:

我们把一个数组的每个元素与给定的数字进行相加,把相加的结果的每个数放进一个新的数组中,最后返回这个新数组的地址,再打印出来就行

2.逆置


Leetcode989:


提示:以下是本篇文章正文内容,下面案例可供参考

题干:

//数组形式的整数加法
//对于非负整数x而言,x=1234,那么数组形式就是[1,2,3,4],给定非负整数x的数组形式A,那么返回x+k的数组形式
//实例:输入A=[1,2,,0,0],K=34
//输出:[1,2,3,,4]
//解释:1200+34=1234

1.思路是这样的:

我们把一个数组的每个元素与给定的数字进行相加,把相加的结果的每个数放进一个新的数组中,最后返回这个新数组的地址,再打印出来就行

1.我们先判断这个数字是几位数

int *addToArrayForm(int* A, int ASize, int k, int* returnSize){
	int kSize = 0;
	int kNum = k;
	//计算k是几位数
	while (kNum)
	{
		++kSize;
		kNum /= 10;
	}

2.判断完数字是几位数后,我们来开辟一个空间,也就是新数组的空间,但是我们考虑到这个新数组的大小是多少,仔细分析后觉得,新数组大小应该是这个数字和这个素组化成整数形式后两个数中更大的那一个,而且还要比更大的那一个再多一个字节,因为两个数相加,可能会进1,比如两个四位数相加,有可能是五位数,所以开辟空间大小确定了下来。

然后我们开始进行循环相加:len--就是当len=0时,两个的最高位相加完了,退出循环,我们最终进1,nextnum=1,但我们开辟的是len+1,循环里面是len,最后一个完全是留给最高位相加进1的。在第二个循环if(Ai>=0)这部分我们考虑到数组的长度比数字的长度小,比如[9 9]+387,此时当数组的最高位加完之后,就没有了元素,我们即使想要0都没有,那么在这个循环中,当Ai也就是下标为负数时,这时候会越界访问,这时我们可以令a=A[Ai],此时Ai=-1/-2,但a=0就满足了,还有一种情况是[1 2 3 4]+99,这种情况下我们不必担心,因为99这个数,我们得到每一位都是靠%和/来实现的,当进行第三位时,99第三次除以的结果是0,满足我们需要的条件。

然后ret就是新数组的某一位:数组A的某一位加上k的某一位,加上后面一位进1的nextnum

	int len = ASize > kSize ? ASize: kSize;
	int* retArr = (int*)malloc(sizeof(int)*(len+1));
	int Ai = ASize - 1;//指向数组的最后一个下标的箭头
	int reti = 0;
	int nextnum = 0;//加法时候进位
	while (len--)
	{
		int a=0;
		if (Ai >= 0)
		{
			a = A[Ai];
			Ai--;
		}
		int ret = a + k % 10+nextnum;
		k /= 10;
		if (ret > 9)
		{
			ret -= 10;
			nextnum = 1;
		}
		else
		{
			nextnum = 0;
		}
		retArr[reti] = ret;
		++reti;
	}
	if (nextnum == 1)
	{
		retArr[reti] = 1;
		++reti;
	}
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import warnings warnings.filterwarnings('ignore') import ssl ssl._create_default_https_context = ssl._create_unverified_context 

2.逆置

上面的代码我们是把数组A的和数字k的最低位相加放进新数组的开始位置,此时我们应该进行逆置

最后返回这个指针(也就是这个数组的首地址),还要释放一下


	//将新数组逆置一下
	int left = 0;
	int right = reti - 1;
	while (left < right)
	{
		int tmp = retArr[left];
		retArr[left] = retArr[right];
		retArr[right] = tmp;
		++left;
		--right;
	}
	*returnSize = reti;
	return retArr;
	free(retArr);
	retArr = NULL;

?3.主函数部分

?在主函数里,我们初始化这个A数组和k,接收的是int*指针,所以我们用一个对应的指针来接收,

再取打印,我们传&returnsize的地址,用指针去接收,为的就是改变这个新数组的大小,我们起初定义returnsize=0,在接口部分令returnsize=reti,改变了新数组的元素大小,为的就是去打印这个新数组

int main()
{
	int arr[] = { 1, 2, 0, 0 };
	int k = 34;
	int ASize1 = sizeof(arr) / sizeof(arr[0]);
	int returnsize = 0;
	int* f = addToArrayForm(&arr, ASize1, k, &returnsize);
	int i = 0;
	for (i = 0; i < returnsize; i++)
	{
		printf("%d ", f[i]);
	}
	return 0;
}

?



  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-03 12:10:17  更:2021-09-03 12:10:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/25 20:18:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码