81,092
社区成员
发帖
与我相关
我的任务
分享
private void getRange(GoodsDTO targetGoods) {
if (null != targetGoods && null != targetGoods.getTypeCon()) {
int num = targetGoods.getTypeCon().intValue();
int index = Constants.EVERY_COUNT;
int totalCeng = Constants.MAX_LEVEL;
double curentStartNum = 0;// 目标层的起始值
int curentCeng = 0;// 目标数位的层数
double curentCount = 0;// 目标层的个数
double startNum = 0;// 最后范围的起始值
double endNum = 0;// 最后范围的结束值
for (int i = 1; i <= totalCeng; i++) {
double a = 0;
double b = 0;
for (int j = 0; j < i; j++) {
a += Math.pow(index, j);
}
for (int k = 1; k <= i; k++) {
b += Math.pow(index, k);
}
}
for (int i = 1; i <= totalCeng; i++) {
curentStartNum = 0;
double curentEndNum = 0;
for (int j = 0; j < i; j++) {
curentStartNum += Math.pow(index, j);
}
for (int k = 1; k <= i; k++) {
curentEndNum += Math.pow(index, k);
}
if (curentStartNum <= num && num <= curentEndNum) {
curentCeng = i;
curentCount = Math.pow(index, curentCeng);
break;
}
}
for (int i = totalCeng; i >= 1; i--) {
double laseCount = 0;// 最后层的个数
double laseStartNum = 0;// 最后一层起始值
double laseNumIndex = 0;// 目标值在最后一层的最后一个位置
int j = 0;
while (j < i) {
laseStartNum += Math.pow(index, j);
j++;
}
laseCount = Math.pow(index, i);// 个数
laseNumIndex = (num - curentStartNum + 1) * laseCount
/ curentCount;
endNum = laseStartNum + laseNumIndex - 1;
startNum = endNum - Math.pow(index, i - curentCeng) + 1;
if (startNum < num) {
break;
}
try {
Integer count = this.goodsDAO.isExistsGoodsType(
(int) startNum, (int) endNum);
if (null != count && count.intValue() > 0) {
targetGoods.setStartType(new Integer((int) startNum));
targetGoods.setEndType(new Integer((int) endNum));
}
} catch (PafaDAOException e) {
e.printStackTrace();
}
System.err.println("起始=" + (long) startNum + " 结束="
+ (long) endNum);
}
}
}
static TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>();
static { //因为map信息是重复使用的,所以把16L的map部分抽出来
int sum = 0, times = 50;
for (int i=0; i<5; i++) {
map.put(sum, i+1);
sum = (sum == 0 ? times : sum*times);
}
}
public static void main(String[] args) {
int x=1;//当前ID
System.out.println(getLevel(x));
int j=getLevel(x);
System.out.println("当前级别为:"+j);
int start=0,end=0;
int c;//差值
// TODO 关于类型测试
c=(int) (x-Math.pow(50, j-1));
//System.out.println(c);
for (int i = 0; i <= j; i++) {
if(j>=5)
break;
if(c>1)
start=(int) (Math.pow(50, j)+50*(c-1)+1);
else
start=(int) (Math.pow(50, j)+50+1);
end=(int) (Math.pow(50, j)+50*c);
//System.out.println((i+1)+" 下一级左边的数:"+start+" \n下一级右边的数:"+end);
j++;
}
System.out.println("左边的数:"+start+"\n右边的数:"+end);
}
public static int getLevel(int score) {
if (score < 1 || score > 312500000) return -1; //超出范围
return map.lowerEntry(score).getValue().intValue();
}
public class Test{
public static void main(){
getQUJIAN(1);
}
public static int[] getQUJIAN(int data){
int start;
int end;
start = end = 0;
int lev = getLev(data);
if(lev==5){
start = end = data;
return new int[]{start,end};
}
else{
start =(int)(data * Math.pow(5-lev)) + 1;
end = start +(int)Math.pow(5-lev) - 1;
return new int[]{start,end};
}
}
public static int getLev(int data){
int lev = 1;
if(data > Math.pow(50,lev)){
data = data - (int)Math.pow(50,lev);
lev++;
}
if(lev > 5){
throw new RuntimeException();
}
}
}
public static int getLevel(int score) {
if (score < 1 || score > 312500000) return -1;
int level=1, next=50;
for (; next<score; level++, next*=50);
return level;
}
import java.util.*;
public class Test {
static TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>();
static { //因为map信息是重复使用的,所以把16L的map部分抽出来
int sum = 0, times = 50;
for (int i=0; i<5; i++) {
map.put(sum, i+1);
sum = (sum == 0 ? times : sum*times);
}
}
public static void main(String[] args) throws Throwable {
for (int i=0, j=1; i<5; i++, j*=50) {
System.out.printf("边界测试当前分数:分数=%d, 级别=%d\n", j, getLevel(j));
System.out.printf("边界测试下个分数:分数=%d, 级别=%d\n", j+1, getLevel(j+1));
int k = (int)(Math.random()*j);
System.out.printf("随机测试:分数=%d, 级别=%d\n", k, getLevel(k));
System.out.println();
}
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个[1-312500000]范围内的整数:");
int score = sc.nextInt();
System.out.printf("输入的分数为:%d, 该分数对应的等级为:%d\n", score, getLevel(score));
}
public static int getLevel(int score) {
if (score < 1 || score > 312500000) return -1; //超出范围
return map.lowerEntry(score).getValue().intValue();
}
}
public int getLevel(int score) {
TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>();
int sum = 0, base = 1, step = 50;
for (int i=0; i<5; i++) {
map.put(sum, i+1);
base *= step;
sum += base;
}
Map.Entry<Integer, Integer> lower = map.lowerEntry(score);
if (lower == null) return -1; //输入了超出等级范围的数据,返回-1
return lower.getValue().intValue();
}
public int getLevel(int score) {
return (score-1)/50 + 1;
}