Leetcode 415 字符串相加 C语言

Leetcode 415 字符串相加 C语言

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。(难度简单)

注意:

num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。

思路就是模拟实际加法运算,从末尾开始运算,采用进位flag进行标识,注意考虑不等长的情况, 分为len1=len2;len1>len2;len1

char* addStrings(char* num1, char* num2) {
    
    int len1=strlen(num1);
    int len2=strlen(num2);
    int len=len1>len2?len1:len2;
    int flag=0;
    char *p=(char *)malloc(sizeof(char)*(len+2));
    *(p+len+1)='\0';
    *p='0';
    char temp;
     while(len1>0&&len2>0)
    {
         temp=num1[len1-1]+num2[len2-1]-'0'+flag;
         if(temp>'9') 
         {
             flag=1;
             p[len]=temp-10;          
         }
         else
         {
             flag=0;
             p[len]=temp;          
         }
        len1--;
        len2--;
        len--;                             
    }
    if(len1>len2)
    {
        while(len1>0)
        {
          temp=num1[len1-1]+flag;
          if(temp>'9') 
         {
          p[len]=temp-10;
          flag=1;   
         }
         else
         {
             flag=0;
             p[len]=temp;           
         }
            len1--;
            len--;
        }        
    }
    if(len1<len2)
    {
        while(len2>0)
        {            
          temp=num2[len2-1]+flag;
          if(temp>'9') 
         {
          p[len]=temp-10;
          flag=1;   
         }
         else
         {
             flag=0;
             p[len]=temp;             
         }
            len2--;
            len--;
        }      
    }
    if(flag==1)
        *p=*p+1;   
    else
    {
        char *p1=p+1;
        return p1;
    }
     return p;         
    } 

你可能感兴趣的:(leetcode,字符串,算法)