题解 | #高精度整数加法#

高精度整数加法

https://www.nowcoder.com/practice/49e772ab08994a96980f9618892e55b6

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
char strres[10009]={0};//全局字符串,用于存放最终结果。便于函数传值。
void AddStr(char str1[],char str2[])//加法函数,从末尾向前逐位相加,注意如果第一位结果有进位,字符串长度要加一。
{
    int len=strlen(str1);
    int pos=0;
    pos=len-1;
    int carryNum=0;
    char strtmp[10009]={0};
    for(;pos>=0;pos--)
    {
        int tmp=0;
        tmp=str1[pos]+str2[pos]+carryNum-'0'*2;
        carryNum=0;
        if(tmp>=10)
        {
            carryNum=1;
            strtmp[pos]='0'+tmp-10;
        }
        else
        {
            strtmp[pos]='0'+tmp;
        }
    }
    if(carryNum==1)//最高位的和大于等于十,则需要进一位。
    {
        strres[0]='1';
        strcat(strres,strtmp);
    }
    else
    {
        strcat(strres,strtmp);
    }
}
int main() {
    char str1[10009]={0};
    char str2[10009]={0};
    
    scanf("%s%s",str1,str2);
    int len1,len2;
    len1=strlen(str1);
    len2=strlen(str2);
    int lendef=abs(len1-len2);
    char strZero[10009]={0};//补零字符串,用于将俩字符串补到等长。
    memset(strZero,'0',lendef);
    if(len1>len2)
    {
        strcat(strZero,str2);
        AddStr(str1,strZero);        
    }
    else if(len1==len2)
    {
        AddStr(str1,str2);
    }
    else
    {
        strcat(strZero,str1);
        AddStr(strZero,str2);
    }
    for(int i=0;i<strlen(strres);i++)
    {
        printf("%c",strres[i]);
    }


}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务