题解 | #高精度整数加法#
高精度整数加法
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]);
}
}
查看6道真题和解析