题解 | #大数加法#
大数加法
https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 计算两个数之和 * @param s string字符串 表示第一个整数 * @param t string字符串 表示第二个整数 * @return string字符串 */ char* solve(char* s, char* t ) { int len,len_s,len_t; int fi_s,fi_t,se_n; long num = 1; char *add; len_s = strlen(s); len_t = strlen(t); if(len_s == 0) return t; else if(len_t == 0) return s; else { se_n = 0; len = len_s < len_t ? (add = t,len_s) : (add = s,len_t); while(*(add++) != '\0') { fi_s = s[len_s - num] - '0'; fi_t = t[len_t - num] - '0'; if(num <= len) { add[strlen(add) - num] = (fi_s + fi_t + se_n) % 10 + '0'; se_n = (fi_s + fi_t + se_n) / 10 == 1 ? 1 : 0; //进位 } else { if(len == len_s) { add[strlen(add) - num] = (fi_t + se_n) % 10 + '0'; se_n = (fi_t + se_n) / 10 == 1 ? 1 : 0; } else { add[strlen(add) - num] = (fi_s + se_n) % 10 + '0'; se_n = (fi_s + se_n) / 10 == 1 ? 1 : 0; } } num++; } if(se_n == 1) { //处理99+1的情况 add = len_s < len_t ? t : s; add[num + 1] = '\0'; for(;num>=1;num--) add[num-1] = add[num-2]; add[0] = se_n + '0'; } } return len_s < len_t ? t : s; }