题解 | #大数加法#简洁且简单

大数加法

https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 计算两个数之和
 * @param s string字符串 表示第一个整数
 * @param t string字符串 表示第二个整数
 * @return string字符串
 */
//想法是先加然后倒置,谨记字符串的'0'和'/0'
//倒置函数
 char* reverse(char* string,int n)
 {
    for(int i=0;i<n/2;i++)
    {
        char t=string[i];
        string[i]=string[n-i-1];
        string[n-i-1]=t;
    }
    return string; 
 }
//主函数,主要是累加
char* solve(char* s, char* t ) {
    // write code here
    int len1,len2,len;
    len1=strlen(s);
    len2=strlen(t);
    if(len1>=len2) len=len1+2;//为新字符串做准备
    else len=len2+2;//同上
    if(s==NULL||t==NULL) return NULL;
    char *z=(char*)malloc(sizeof(char)*len);
    int k=0;
    int m=0,a,b,sum;
  //开始累加
    for(int i=len1-1,j=len2-1;i>=0||j>=0;i--,j--)
    {
    //这段我开始没写好,参照了其他题解,比较好理解
        if(i>=0) a=s[i]-'0';
        if(j>=0) b=t[j]-'0'; 
        sum=a+b+m;
        if(sum>9){
            sum=sum%10;
            m=1;
        }
        else m=0;
        z[k++]=sum+'0';
        a=0,b=0;
      
    }
  //如果加完还有进位,那么置1,并倒置,因为此时有进位,所以倒置长度+1
    if(m){
        z[k]='1';
        reverse(z,k+1);
        z[k+1]='\0';
    }
  //没有进位,直接倒置
    else{
        reverse(z,k);
        z[k]='\0';
    }
    return z;
    

    
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务