Last active
August 3, 2016 03:52
-
-
Save zhangolve/8feb21a5008d1c0c6bbf9fc232016f85 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function checkCashRegister(price, cash, cid) { | |
//fix the bug | |
function accAdd(arg1, arg2) { | |
var r1, r2, m, c; | |
try { | |
r1 = arg1.toString().split(".")[1].length; | |
} | |
catch (e) { | |
r1 = 0; | |
} | |
try { | |
r2 = arg2.toString().split(".")[1].length; | |
} | |
catch (e) { | |
r2 = 0; | |
} | |
c = Math.abs(r1 - r2); | |
m = Math.pow(10, Math.max(r1, r2)); | |
if (c > 0) { | |
var cm = Math.pow(10, c); | |
if (r1 > r2) { | |
arg1 = Number(arg1.toString().replace(".", "")); | |
arg2 = Number(arg2.toString().replace(".", "")) * cm; | |
} else { | |
arg1 = Number(arg1.toString().replace(".", "")) * cm; | |
arg2 = Number(arg2.toString().replace(".", "")); | |
} | |
} else { | |
arg1 = Number(arg1.toString().replace(".", "")); | |
arg2 = Number(arg2.toString().replace(".", "")); | |
} | |
return (arg1 + arg2) / m; | |
} | |
function accSub(arg1, arg2) { | |
var r1, r2, m, n; | |
try { | |
r1 = arg1.toString().split(".")[1].length; | |
} | |
catch (e) { | |
r1 = 0; | |
} | |
try { | |
r2 = arg2.toString().split(".")[1].length; | |
} | |
catch (e) { | |
r2 = 0; | |
} | |
m = Math.pow(10, Math.max(r1, r2)); //last modify by deeka //动态控制精度长度 | |
n = (r1 >= r2) ? r1 : r2; | |
return ((arg1 * m - arg2 * m) / m).toFixed(n); | |
} | |
//fix the bug end | |
//define the type with numbe | |
cid[0][0]=0.01; | |
cid[1][0]=0.05; | |
cid[2][0]=0.1; | |
cid[3][0]=0.25; | |
cid[4][0]=1; | |
cid[5][0]=5; | |
cid[6][0]=10; | |
cid[7][0]=20; | |
cid[8][0]=100; | |
// define end | |
var change; | |
// Here is your change, ma'am. | |
change=cash-price; | |
var sum=0; //cid all cash | |
//check if there is no cash to change | |
for(var i=0;i<cid.length;i++) | |
{ | |
sum=accAdd(sum,cid[i][1]); | |
} | |
//changeRes start | |
//以需找零96.74为例,经过第一次i=1找到60元,剩余36.74,i=2时,36.74-20=16.74,i=3的时候,cid[3][1]==55是大于change的,这个时候要凑出来一个数额,在这里是3×5.所以要用else,这个时候就是16.74-15=1.74,i=4,1.74-1=0.74,i=5,0.74-0.5=0.24,i=6 0.24-0.1*2=0.04,i=7这一步很关键,这里就是空的,在数组中增加0,当i=8时0.04= | |
function changeRes(change,cid) | |
{ | |
var finalArr=[]; //define the return array | |
var resArr=[];//最终的二维数组 | |
var oldChange=change; //把他固定住,方便以后比较 | |
for(var i=8;i>-1;i--) | |
{ | |
if(change-cid[i][1]>0)//change >type exampe change 70 cid[i][1] 40 | |
{ | |
finalArr.push(cid[i][1]); | |
change=accSub(change,cid[i][1]); //这就是新的找零了 | |
} | |
else{ | |
if(cid[i][0]>change) //单张面值就比change大,则没有对应的钱币来找 | |
{ | |
finalArr.push(0); | |
} | |
else{ | |
for(var j=0;j<100;j++){ | |
if((j*cid[i][0]<change||change==cid[i][0]*j)&&(j+1)*cid[i][0]>change )//找出来那个数字 | |
{ | |
finalArr.push(cid[i][0]*(j)); | |
change=accSub(change,cid[i][0]*(j)); | |
break; | |
} | |
} | |
} | |
} | |
} | |
var sum=finalArr.reduce(function(a,b){ | |
return accAdd(a,b); | |
}); | |
if(sum==oldChange) //最初的change | |
{ | |
//构造一个新的二维数组 | |
var numberArr=["ONE HUNDRED","TWENTY","TEN","FIVE","ONE","QUARTER","DIME","NICKEL","PENNY"]; | |
for(var k=0;k<finalArr.length;k++) | |
{ | |
if(finalArr[k]!==0) | |
{ | |
resArr.push([numberArr[k],finalArr[k]]); | |
} | |
} | |
return resArr; | |
} | |
else{ | |
return "Insufficient Funds"; | |
} | |
} | |
//changeRes end | |
//obviously Insufficient Funds condition | |
if(sum-change<0) | |
{ | |
return "Insufficient Funds"; | |
} | |
else{ | |
//equals condition | |
if(sum==change) | |
{ | |
return 'Closed'; | |
} | |
// maybe can change condition | |
else if(sum>change) | |
{ | |
//add a function | |
return changeRes(change,cid); | |
} | |
} | |
//else end | |
} | |
checkCashRegister(3.26, 100.00, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.10], ["QUARTER", 4.25], ["ONE", 90.00], ["FIVE", 55.00], ["TEN", 20.00], ["TWENTY", 60.00], ["ONE HUNDRED", 100.00]]); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment