题解 | #大数加法#

大数加法

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;

}

全部评论

相关推荐

水墨不写bug:疑似没有上过大学
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务