数组形式的整数加法
一,问题
1.对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X = 1231,那么其数组形式为 [1,2,3,1]。给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式。

二.问题思路

三.代码实现
/** * Note: The returned array must be malloced, assume caller calls free(). */ int* addToArrayForm(int* num, int numSize, int k, int* returnSize) { int ksize=0; int a=k; //找到k的位有几个 while(a) { ++ksize;; a/=10; } int len=ksize>numSize?ksize+1:numSize+1;//求出最大的数据位,并让最大的位加1,使得加的数据不会超过这个最大位 int *retarr=(int*)malloc(sizeof(int)*len); int ni=numSize-1; //num循环的控制位, int ki=0; //k循环的控制位 int next=0;//进位 int reti=0;//返回数据的规格 while(ni>=0||ki<ksize) { int aval=0; if(ni>=0) { aval=num[ni--];//得到数组的最后一个数据 } int kval=k%10; //得到k的每一位,从最后一位开始 k=k/10; ki++; int ret=aval+kval+next;//得到数值的和 if(ret>=10) //如果大于10,进位等于1,此时ret=ret-10; { next=1; ret-=10; } else { next=0; } retarr[reti++]=ret; } if(next==1)//判断完以后, { retarr[reti++]=1; } //数据逆置,因为刚开始把最后位数据放在新数组的第一位,所以需要逆置 int begin=0,end=reti-1; while(begin<end) { int temp=0; temp=retarr[begin]; retarr[begin]=retarr[end]; retarr[end]=temp; ++begin; --end; } *returnSize=reti;//返回数组的规格 return retarr; //返回数组地址 }
本文来自博客园,作者:ETTA-7,转载请注明原文链接:https://www.cnblogs.com/etta-7/

浙公网安备 33010602011771号