大数算法(大数相加)

本文介绍了一种使用Byte数组实现的大数加法算法。该方法首先将字符串形式的大数转换为Byte数组,然后通过逐位相加并进位的方式完成加法运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这几天做projecteuler
发现数学很重要啊!
当计算非常大的数的相乘时,使用BigDecimal
便希望能自己实现大数的乘法
因为乘法里要使用加法,就先实现加法了
开始时,大数使用字符串保存
这时候我们需要将大数存储在一个数组里
为了节省空间,我们使用Byte存储每一位

	public static Byte[] StringToByte(String number){
int len = number.length();
Byte[] result = new Byte[len];
//从高位到低位依次转换,转换后字符串"1234"变为4321,这样方便以后计算
for(int i=0; i<number.length(); i++){
byte curByte = Integer.valueOf(number.charAt(i)+"").byteValue();
result[len-i-1] = curByte;
}

return result;
}


加法算法

	public static Byte[] Add(Byte[] number1, Byte[] number2){
int len = (number1.length>number2.length) ? number1.length : number2.length;
Byte[] result = new Byte[len+1];
Integer sum = new Integer(0);
Integer carry = new Integer(0);
int i;
if(number1.length>number2.length){
for(i=0; i<number2.length; i++){
sum = number1[i].intValue() + number2[i].intValue();
sum = sum +carry;
carry = ((sum -10)>=0) ? 1:0;
sum = ((sum -10)>=0) ? (sum-10):sum;
result[i] = sum.byteValue();
sum = 0;
}
for(;i<number1.length;i++){
sum = sum +carry;
carry = ((sum -10)>=0) ? 1:0;
sum = ((sum -10)>=0) ? (sum-10):sum;
result[i] = sum.byteValue();
sum = 0;
}
if(carry!=0){
result[i] = carry.byteValue();
}else{
result[i] = 0;
}
}else{
for(i=0; i<number1.length; i++){
sum = number1[i].intValue() + number2[i].intValue();
sum = sum +carry;
carry = ((sum -10)>=0) ? 1:0;
sum = ((sum -10)>=0) ? (sum-10):sum;
result[i] = sum.byteValue();
sum = 0;
}
for(;i<number2.length;i++){
sum = number2[i].intValue() + carry;
carry = ((sum -10)>=0) ? 1:0;
sum = ((sum -10)>=0) ? (sum-10):sum;
result[i] = sum.byteValue();
sum = 0;
}
if(carry!=0){
result[i] = carry.byteValue();
}else{
result[i] = 0;
}
}

return result;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值