当前位置: 首页 > Web前端 > JavaScript

【算法训练营】数值计算

时间:2023-03-26 22:23:58 JavaScript

1.将指定的整数值分成指定的个数,最后返回可以等分的整数值/***@param{Number}*@return{Number}*/functionintervalHandle(num,num_interval){if(indexOfHandle(num,num_interval)){returnnum}else{for(vari=0;i<=num_interval;i++){varnum_new=numnum_new+=i;if(indexOfHandle(num_new,num_interval)){returnnum_new}}}functionindexOfHandle(x,y){returnString((x/y)).indexOf('.')===-1}}intervalHandle(1999,10)//=>2000//intervalHandle(给定值,待平分的数)//应用场景:图表x/y轴计算最大值和区间值2.判断一个数是否为质数/质数概念:质数又称素数。大于1的自然数,除了1和它本身以外,不能被其他自然数整除的数,称为素数;否则称为合数。0和1既不是素数也不是合数,最小的素数是2/***@param{Number}*@return{Number}*/functionisPrime(num){if(num<=3)returnn>1letsqrt=parseInt(Math.sqrt(num))for(leti=2;i<=sqrt;i++){if(num%i===0){returnfalse}}returntrue}console.log(isPrime(10))//=>false3。计算两个数字之间的连续值(输入1,4=>输出1,2,3,4)functioncontinuousValue(numStart,numEnd){leta=parseInt(numStart);让b=parseInt(numEnd);让c=[];如果(numStart-b<0){constnumber=Math.abs(a-b)+1;for(leti=a;i0){constnumber=Math.abs(a-b);for(leti=a;i>number;i--){c.push(i);}}返回c.join(',');}continuousValue(1,5)//=>'1,2,3,4,5'4。计算每个值在一组值中的比例(百分比%)/***@description:比例算法(最大平衡法)*@param{Array}valueList要计算的数组*@param{index}idx计算数组中值的下表*@param{number}precision百分比保留小数位*/functiongetPercentValue(valueList,idx,precision){if(!valueList[idx]){返回0;}varsum=valueList.reduce(function(acc,val){returnacc+(isNaN(val)?0:val);},0);如果(总和===0){返回0;}vardigits=Math.pow(10,精度);varvotesPerQuota=valueList.map(function(val){return(isNaN(val)?0:val)/sum*digits*100;});vartargetSeats=数字*100;//取值向下组成数组varseats=votesPerQuota.map(function(votes){returnMath.floor(votes);});varcurrentSum=seats.reduce(function(acc,val){returnacc+val;},0);varremainder=votesPerQuota.map(function(votes,idx){returnvotes-seats[idx];});while(currentSum最大值){最大值=余数[i];最大ID=我;}}//最大物品余额加1++seats[maxId];余数[maxId]=0;++当前总和;}//总占100%返回席位[idx]/digits;}//调用leta=[1,2]letresult=[];a.forEach((v,i)=>{result.push(getPercentValue(a,i,0))});安慰。日志(结果)//[33,67]