题解 | #高精度整数加法#
高精度整数加法
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]); } }