大数相加,大数相减(Java版)
发布时间:2021-05-26 18:09:39 所属栏目:大数据 来源:网络整理
导读: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[]?
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(); } } (编辑:随州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |