我看到了映射数字算法的这个问题。
我正在尝试在 java 中实现 @PeterAllenWebb 解决方案,如下所示:
long A = 1l;
long B = 999999999l;
long C = 1000000000l;
long D = 9999999999l;
long X = 999999998l;
long Y = (D-C)*(X-A)/(B-A) + C;
System.out.println("original is " + X);
long reverseX = (B-A)*(Y-C)/(D-C) + A;
System.out.println("reverse is " + reverseX);
但是,这并不总是有效。
见下文:
X reverseX
999999998 999999997
1 1
999999999 999999999
12 11
如您所见,只有最小值 (A) 和最大值 (B) 返回正常。
其余的,我需要加 1。这在我看来是地板/圆形/数学问题,我不想依赖计算它的 JVM。我希望它始终有效。
我怎样才能使上述工作适用于reverseX?