您的位置:首页 > 其它

大整数加法减法

2012-10-20 19:02 204 查看
超过long域的整数加法减法,代码:

<script type="text/javascript">
window.onload = function(){

var inputs = document.getElementsByTagName("input");

//alert(inputs.length);
inputs[3].onclick = function(){

inputs[2].value = bigIntegerAdd(inputs[0].value,inputs[1].value)==undefined ?
'' : bigIntegerAdd(inputs[0].value,inputs[1].value);
//alert((/^(\+?||\-?)?\d+$/).test("=345345"))

}
}

function bigIntegerAdd(value1,value2){

if((/^(\+?||\-?)?\d+$/.test(value1))&&(/^(\+?||\-?)?\d+$/.test(value2))){

if(value1.charAt(0)=='+')//加号对于计算没有意义,去掉
value1 = value1.substring(1);
if(value2.charAt(0)=="+")
value2 = value2.substring(1);

if(value1.length<value2.length){//确定长的串为value1
var temp=value1;value1=value2;value2=temp;
}

var result = [];//存放结果
var carrier = 0;//进位和借位

var a = value1.charAt(0);
var b = value2.charAt(0);
var sign = '';
if((a=='-'&&b=="-")||(a!='-'&&b!='-')){//同号
if(a=='-'){//都是负数
value1 = value1.substring(1);
value2 = value2.substring(1);
sign = "-";
}
if(value1.length!=value2.length){
var zeros = [];
for(var i=0;i<value1.length-value2.length;i++){
zeros.push('0');
}
value2 = zeros.join('')+value2;
}
for(var i=value1.length-1;i>=0;i--){//全部加起来
var c1 = value1.charAt(i);
var c2 = value2.charAt(i);

var value = parseInt(c1)+parseInt(c2)+carrier;
//var value = c1-48+c2-48+carrier;
//单字符不能用ascii码计算,为什么???
if(value>9){
carrier = 1;
value -= 10;
}else{
carrier = 0;
}
result.push(value);
}
if(carrier==1){//有进位
result.push(carrier);
}
if(sign=='-'){//加入符号
result.push('-');
}

}else{//不是同号
if(a=='-'){//确定最后结果是正还是负
if(value1.length-value2.length>=2)
sign = '-';
else if(value1.length-value2.length==1){
for(var i=0;i<value2.length;i++){
if(+value1.charAt(i+1)>+value2.charAt(i)){
sign = "-";
break;
}
}
}
}
//去掉符号
if(b=='-'){
value2 = value2.substring(1);
}
if(a=='-'){
value1 = value1.substring(1);
}

//确定value1为较大的那个数,value2为较小的那个数,同时保证他们位数相同。
var kkk = value1.length-value2.length;
if(kkk>0){
var zeros = [];
for(var i=0;i<kkk;i++){
zeros.push(0);
}
value2 = zeros.join('')+value2;

}else if(kkk==0){
for(var i=0;i<value2.length;i++){
if(+value1.charAt(i)<+value2.charAt(i)){
var temp=value1;value1=value2;value2=temp;
break;
}
}
}else{
value1 = '0'+value1;
var temp=value1;value1=value2;value2=temp;
}
//value1-value2加上符号就是结果
for(var i=value1.length-1;i>0;i--){
var c1 = value1.charAt(i);
var c2 = value2.charAt(i);
var value = +c1-(+c2)+carrier;
if(value<0){
value = value+10;
carrier = -1;
}else{
carrier = 0;
}
result.push(value);
}
if(carrier+(+value1.charAt(0))-(+value2.charAt(0))!=0){
result.push(carrier+(+value1.charAt(0))-(+value2.charAt(0)));
}
if(sign=='-'){
result.push(sign);
}
}

for(var i=0,j=result.length-1;i<j;i++,j--){
var temp=result[i];result[i]=result[j];result[j]=temp;
}
return /^0+$/.test(result.join("")) ? 0:result.join("");

}else{
alert("输入的内容不是数字");
}

}

</script>
<body>
<input type="text" style="width:300px"/>
<font color="red">+</font>
<input type="text" style="width:300px"/>
<font color="red">=</font>
<input type="text" style="width:300px"/>
<input type="button" value="计算"/>
</body>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐