大整数加法减法
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>
相关文章推荐
- 大整数运算之 大整数加法、减法、乘法
- 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
- 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
- 大整数运算之 大整数加法、减法、乘法
- 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
- 大精度整数三种运算(加法,减法,乘法)
- 大整数的加法、减法和乘法
- 整数大数模拟 高精度加法 高精度减法 高精度乘法 高精度除法 c/c++ java
- 实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。 例如:输入t
- 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
- 大型整数运算:加法, 减法, 乘法
- 算法(求对输入的N个数进行加法或减法运算,得到最小的正整数的组合.)
- 整数高精度运算的库(加法,减法,乘法,除法,取模)
- 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
- 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
- 大整数加法减法与乘法
- 贪心算法-大整数乘法/加法/减法
- 大整数算法[08] 有符号加法和减法
- 大整数的乘法、加法、减法
- 大整数运算(加法,减法,除法,求余,求最大公约数)