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

