数组形式的整数加法

一,问题

    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; //返回数组地址 
}

 

posted @ 2022-01-10 10:41  小杜加油  阅读(40)  评论(0)    收藏  举报