加入收藏 | 设为首页 | 会员中心 | 我要投稿 厦门网 (https://www.xiamenwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数相加,大数相减(Java版)

发布时间:2021-05-27 05:10:08 所属栏目:大数据 来源:网络整理
导读:package?cn.yunmanage.haikang;public?class?BigNumberAdd?{public?static?void?main(String[]?args)?{System.out.println(bigNumberAdd("111",?"999"));}public?static?String?bigNumberAdd(String?f,?String?s)?{//?翻转两个字符串,并转换成数组char[]?a?

package?cn.yunmanage.haikang;

public?class?BigNumberAdd?{
	public?static?void?main(String[]?args)?{
		System.out.println(bigNumberAdd("111",?"999"));
	}

	public?static?String?bigNumberAdd(String?f,?String?s)?{
		//?翻转两个字符串,并转换成数组
		char[]?a?=?new?StringBuffer(f).reverse().toString().toCharArray();
		char[]?b?=?new?StringBuffer(s).reverse().toString().toCharArray();
		int?lenA?=?a.length;
		int?lenB?=?b.length;
		//?计算两个长字符串中的较长字符串的长度
		int?len?=?lenA?>?lenB???lenA?:?lenB;
		int[]?result?=?new?int[len?+?1];//?长度为len+1(因为可能有进位)
		for?(int?i?=?0;?i?<?len?+?1;?i++)?{
			//?如果当前的i超过了其中的一个,就用0代替,和另一个字符数组中的数字相加
			int?aint?=?i?<?lenA???(a[i]?-?'0')?:?0;
			int?bint?=?i?<?lenB???(b[i]?-?'0')?:?0;
			result[i]?=?aint?+?bint;
		}
		//?处理结果集合,如果大于等于10的就向前一位进位,本身进行除10取余
		for?(int?i?=?0;?i?<?result.length;?i++)?{
			if?(result[i]?>=?10)?{
				result[i?+?1]?+=?result[i]?/?10;
				result[i]?%=?10;
			}
		}
		StringBuffer?sb?=?new?StringBuffer();
		//?该字段用于标识是否有前置0,如果有就不要存储
		boolean?flag?=?true;
		for?(int?i?=?len;?i?>=?0;?i--)?{
			if?(result[i]?==?0?&&?flag)?{
				continue;
			}?else?{
				flag?=?false;
			}
			sb.append(result[i]);
		}
		return?sb.toString();
	}
}

package?cn.yunmanage.haikang;

public?class?BigNumberSub?{
	public?static?void?main(String[]?args)?{
		System.out.println(bigNumberSub02("99",?"2222"));
	}

	public?static?String?bigNumberSub(String?f,?String?s)?{
		System.out.print("减法:"?+?f?+?"-"?+?s?+?"=");
		//?将字符串翻转并转换成字符数组
		char[]?a?=?new?StringBuffer(f).reverse().toString().toCharArray();
		char[]?b?=?new?StringBuffer(s).reverse().toString().toCharArray();
		int?lenA?=?a.length;
		int?lenB?=?b.length;
		//?找到最大长度
		int?len?=?lenA?>?lenB???lenA?:?lenB;
		int[]?result?=?new?int[len];
		//?表示结果的正负
		char?sign?=?'+';
		//?判断最终结果的正负
		if?(lenA?<?lenB)?{
			sign?=?'-';
		}?else?if?(lenA?==?lenB)?{
			int?i?=?lenA?-?1;
			while?(i?>?0?&&?a[i]?==?b[i])?{
				i--;
			}
			if?(a[i]?<?b[i])?{
				sign?=?'-';
			}
		}
		//?计算结果集,如果最终结果为正,那么就a-b否则的话就b-a
		for?(int?i?=?0;?i?<?len;?i++)?{
			int?aint?=?i?<?lenA???(a[i]?-?'0')?:?0;//?将字符串转为数字,以最长的为准,不够的补0
			int?bint?=?i?<?lenB???(b[i]?-?'0')?:?0;
			if?(sign?==?'+')?{
				result[i]?=?aint?-?bint;
			}?else?{
				result[i]?=?bint?-?aint;
			}
		}
		//?如果结果集合中的某一位小于零,那么就向前一位借一,然后将本位加上10。其实就相当于借位做减法
		for?(int?i?=?0;?i?<?result.length?-?1;?i++)?{
			if?(result[i]?<?0)?{
				result[i?+?1]?-=?1;
				result[i]?+=?10;
			}
		}

		StringBuffer?sb?=?new?StringBuffer();
		//?如果最终结果为负值,就将负号放在最前面,正号则不需要
		if?(sign?==?'-')?{
			sb.append('-');
		}
		//?判断是否有前置0
		boolean?flag?=?true;
		for?(int?i?=?len?-?1;?i?>=?0;?i--)?{
			if?(result[i]?==?0?&&?flag)?{
				continue;
			}?else?{
				flag?=?false;
			}
			sb.append(result[i]);
		}
		//?如果最终结果集合中没有值,就说明是两值相等,最终返回0
		if?(sb.toString().equals(""))?{
			sb.append("0");
		}
		//?返回值
		System.out.println(sb.toString());
		return?sb.toString();
	}
}

(编辑:厦门网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读