[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.javascript

Big numb subtraction anybase working

JT

3/23/2015 10:32:00 AM

But there is no parser so you have to feed A-B not -A+B and the sign you have to keep track.

/* SUBTRACT TWO VARIABLES */

function naiveSub(base,arrOne,arrTwo) {
result=[];
for (i=0;i<length;i++){
j=0;

if (arrOne[i]<arrTwo[i]) {
arrOne[i]+=base;
j=i;
while (arrOne[j+1]==0) { arrOne[j+1]+=base-1; j++; }
arrOne[j+1]+=-1;
}
j=0;
result[i]=arrOne[i]-arrTwo[i];

}
if (result[i-1]==0) result.splice(i-1, 1);
}

**********************************************

<SCRIPT LANGUAGE="Javascript">

/*MULTIPLY TWO VARIABLES*/

function naiveMult(base,arrOne,arrTwo) {

document.calc.trash.value="hello";
}

/* SUBTRACT TWO VARIABLES */

function naiveSub(base,arrOne,arrTwo) {
result=[];
for (i=0;i<length;i++){
j=0;

if (arrOne[i]<arrTwo[i]) {
arrOne[i]+=base;
j=i;
while (arrOne[j+1]==0) { arrOne[j+1]+=base-1; j++; }
arrOne[j+1]+=-1;
}
j=0;
result[i]=arrOne[i]-arrTwo[i];

}
if (result[i-1]==0) result.splice(i-1, 1);
}

/*ADD TWO VARIABLES*/

function naiveAdd(base,arrOne,arrTwo) {
remainder=0;
for (i=0;i<length;i++){
result[i]=arrOne[i]+arrTwo[i]+remainder;
if (result[i]>=base) { result[i]=result[i]-base; remainder=1;}
else {remainder=0;}
}
if (remainder==1) result[i++]=1; else result.splice(i, 1);
}

/*PREPARE STRING PAIR*/

function strPrep(sign,strOne,strTwo) {
document.calc.trash.value="2";
arrOne=strOne.split("");
arrTwo=strTwo.split("");
arrOne.reverse();
arrTwo.reverse();
if (arrOne.length>=arrTwo.length) {length=arrOne.length;} else {length=arrTwo.length;}
for (i=0;i<length;i++){
arrOne[i]=parseInt(arrOne[i]);
arrTwo[i]=parseInt(arrTwo[i]);
if (isNaN(arrOne[i])) arrOne[i] = 0;
if (isNaN(arrTwo[i])) arrTwo[i] = 0;
}
}

/* MULTIPLY Container*/

function multWrap(sign,strEval,strBase){
strOne=adder[0];
strTwo=adder[1];
strPrep(strOne,strTwo);
naiveMult(base,arrOne,arrTwo);
out=result.reverse().toString();
document.calc.result.value=out;
}

/* SUBTRACTION Container*/

function subWrap(sign,strEval,strBase){
tONE=parseInt(subtract[0]);
tTWO=parseInt(subtract[1]);
if(tONE<tTWO) {strOne=subtract[1];strTwo=subtract[0];}
else {strOne=subtract[0];strTwo=subtract[1];}


strPrep(sign,strOne,strTwo);
naiveSub(base,arrOne,arrTwo);
out=result.reverse().toString();
document.calc.result.value=out;
}

/* ADDITION Container*/

function addWrap(sign,strEval,strBase){
strOne=adder[0];
strTwo=adder[1];
strPrep(strOne,strTwo);
naiveAdd(base,arrOne,arrTwo);
out=result.reverse().toString();
document.calc.result.value=out;
}

/*PARSE THE STRING*/

function parser(strEval,strBase){
document.calc.trash.value="2";
//sign="*";
//multiply=strEval.split("*");
//multWrap(sign,multiply,strBase)
sign="-";
subtract=strEval.split("-");
subWrap(sign,subtract,strBase);
//sign="+";
//adder=strEval.split("+");
//addWrapper(sign,adder,strBase);
}

/*[MAIN PROGRAM]*/
/*[TAKE INPUT FROM FORM] [PARSE THE STRING] [CALCULATE RESULT]*/
/*[GENERIC CALCULATIONS] [USING BIGNUMB OPERATORS] [IN ANYBASE] [UPON OPERANDS] */

function fetchValues(){

strEval = document.calc.eval.value;
strBase = document.calc.formbase.value;
document.calc.trash.value="1";
base=parseInt(strBase);
parser(strEval,strBase);


}

/*GLOBAL*/
var subtract = [];
var adder = [];
var arrOne = [];
var arrTwo = [];
var result = [];
length; base=10;temp="";

</SCRIPT>

<HTML>
<body onload="fetchValues()">
<FORM name=calc onSubmit="fetchValues(); return false;">
BASE <input type="text" name="formbase" value="10" size="4"><br>
<input type=submit name="calc" value="Calc"><input type="text" name="eval" value="100-7" size="80"><br>
RESULT<input type="text" name="result" value="" size="80"><br>
Trash<input type="text" name="trash" value="" size="80"><br>
</FORM>
</BODY>
</HTML>
1 Answer

JT

3/23/2015 11:14:00 AM

0

Den måndag 23 mars 2015 kl. 11:32:28 UTC+1 skrev jonas.t...@gmail.com:
> But there is no parser so you have to feed A-B not -A+B and the sign you have to keep track.
>
> /* SUBTRACT TWO VARIABLES */
>
> function naiveSub(base,arrOne,arrTwo) {
> result=[];
> for (i=0;i<length;i++){
> j=0;
>
> if (arrOne[i]<arrTwo[i]) {
> arrOne[i]+=base;
> j=i;
> while (arrOne[j+1]==0) { arrOne[j+1]+=base-1; j++; }
> arrOne[j+1]+=-1;
> }
> j=0;
> result[i]=arrOne[i]-arrTwo[i];
>
> }
> if (result[i-1]==0) result.splice(i-1, 1);
> }
>
> **********************************************
>
> <SCRIPT LANGUAGE="Javascript">
>
> /*MULTIPLY TWO VARIABLES*/
>
> function naiveMult(base,arrOne,arrTwo) {
>
> document.calc.trash.value="hello";
> }
>
> /* SUBTRACT TWO VARIABLES */
>
> function naiveSub(base,arrOne,arrTwo) {
> result=[];
> for (i=0;i<length;i++){
> j=0;
>
> if (arrOne[i]<arrTwo[i]) {
> arrOne[i]+=base;
> j=i;
> while (arrOne[j+1]==0) { arrOne[j+1]+=base-1; j++; }
> arrOne[j+1]+=-1;
> }
> j=0;
> result[i]=arrOne[i]-arrTwo[i];
>
> }
> if (result[i-1]==0) result.splice(i-1, 1);
> }
>
> /*ADD TWO VARIABLES*/
>
> function naiveAdd(base,arrOne,arrTwo) {
> remainder=0;
> for (i=0;i<length;i++){
> result[i]=arrOne[i]+arrTwo[i]+remainder;
> if (result[i]>=base) { result[i]=result[i]-base; remainder=1;}
> else {remainder=0;}
> }
> if (remainder==1) result[i++]=1; else result.splice(i, 1);
> }
>
> /*PREPARE STRING PAIR*/
>
> function strPrep(sign,strOne,strTwo) {
> document.calc.trash.value="2";
> arrOne=strOne.split("");
> arrTwo=strTwo.split("");
> arrOne.reverse();
> arrTwo.reverse();
> if (arrOne.length>=arrTwo.length) {length=arrOne.length;} else {length=arrTwo.length;}
> for (i=0;i<length;i++){
> arrOne[i]=parseInt(arrOne[i]);
> arrTwo[i]=parseInt(arrTwo[i]);
> if (isNaN(arrOne[i])) arrOne[i] = 0;
> if (isNaN(arrTwo[i])) arrTwo[i] = 0;
> }
> }
>
> /* MULTIPLY Container*/
>
> function multWrap(sign,strEval,strBase){
> strOne=adder[0];
> strTwo=adder[1];
> strPrep(strOne,strTwo);
> naiveMult(base,arrOne,arrTwo);
> out=result.reverse().toString();
> document.calc.result.value=out;
> }
>
> /* SUBTRACTION Container*/
>
> function subWrap(sign,strEval,strBase){
> tONE=parseInt(subtract[0]);
> tTWO=parseInt(subtract[1]);
> if(tONE<tTWO) {strOne=subtract[1];strTwo=subtract[0];}
> else {strOne=subtract[0];strTwo=subtract[1];}
>
>
> strPrep(sign,strOne,strTwo);
> naiveSub(base,arrOne,arrTwo);
> out=result.reverse().toString();
> document.calc.result.value=out;
> }
>
> /* ADDITION Container*/
>
> function addWrap(sign,strEval,strBase){
> strOne=adder[0];
> strTwo=adder[1];
> strPrep(strOne,strTwo);
> naiveAdd(base,arrOne,arrTwo);
> out=result.reverse().toString();
> document.calc.result.value=out;
> }
>
> /*PARSE THE STRING*/
>
> function parser(strEval,strBase){
> document.calc.trash.value="2";
> //sign="*";
> //multiply=strEval.split("*");
> //multWrap(sign,multiply,strBase)
> sign="-";
> subtract=strEval.split("-");
> subWrap(sign,subtract,strBase);
> //sign="+";
> //adder=strEval.split("+");
> //addWrapper(sign,adder,strBase);
> }
>
> /*[MAIN PROGRAM]*/
> /*[TAKE INPUT FROM FORM] [PARSE THE STRING] [CALCULATE RESULT]*/
> /*[GENERIC CALCULATIONS] [USING BIGNUMB OPERATORS] [IN ANYBASE] [UPON OPERANDS] */
>
> function fetchValues(){
>
> strEval = document.calc.eval.value;
> strBase = document.calc.formbase.value;
> document.calc.trash.value="1";
> base=parseInt(strBase);
> parser(strEval,strBase);
>
>
> }
>
> /*GLOBAL*/
> var subtract = [];
> var adder = [];
> var arrOne = [];
> var arrTwo = [];
> var result = [];
> length; base=10;temp="";
>
> </SCRIPT>
>
> <HTML>
> <body onload="fetchValues()">
> <FORM name=calc onSubmit="fetchValues(); return false;">
> BASE <input type="text" name="formbase" value="10" size="4"><br>
> <input type=submit name="calc" value="Calc"><input type="text" name="eval" value="100-7" size="80"><br>
> RESULT<input type="text" name="result" value="" size="80"><br>
> Trash<input type="text" name="trash" value="" size="80"><br>
> </FORM>
> </BODY>
> </HTML>

It works perfectly well even in base two.