题解 | #大数加法#简洁且简单
大数加法
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; }