Math 确定任何基础的位置值
我正在寻找一个函数,该函数将确定给定数字和基数的位置的值。比如说, 给定: 应返回:2 有人知道这方面的数学吗Math 确定任何基础的位置值,math,Math,我正在寻找一个函数,该函数将确定给定数字和基数的位置的值。比如说, 给定: 应返回:2 有人知道这方面的数学吗 编辑:该函数还应以数字形式传递整个值,而不是像“e328fa”之类的字符串。此外,返回值也应该是数字,因此FindInPlace(60(整数值)、16(基数)、2(位置、基于1的索引))应该返回3。如果数字已经转换为整数(即基数10) 或者将代码重写为 char FindPlace(int number, int base, int digitAsBaseToAPower) {
编辑:该函数还应以数字形式传递整个值,而不是像“e328fa”之类的字符串。此外,返回值也应该是数字,因此FindInPlace(60(整数值)、16(基数)、2(位置、基于1的索引))应该返回3。如果数字已经转换为整数(即基数10) 或者将代码重写为
char FindPlace(int number, int base, int digitAsBaseToAPower)
{
// TODO: Error checking
return digits[(number / digitAsBaseToAPower) % base];
}
这适用于10进制,可以处理小数点左右的位置。您可以这样使用它:
place = getPlace(1120,10);
otherPlace = getPlace(0.1120,1e-3);
对于任何基础来说,更通用的解决方案都是棘手的。我会选择字符串解决方案。像这样的
int place_value(int value, int base, int place)
{
int value_in_place= value;
for (int place_index= 1; place_index<place; ++place_index)
{
value_in_place/=base;
}
return value_in_place % base;
}
int-place\u值(int-value,int-base,int-place)
{
int value_in_place=值;
对于(int place_index=1;place_index,以下方法placeValue返回一个字符,因为基数11-36的位数大于9。该方法要求:
- 整数值:整数值
- 整数基数:将整数转换为整数的基数;可接受的值为2-36
- int-place:该数字的索引;最低有效位有索引1
对于基于1的位置索引,公式为:
placeval=楼层(编号/(底座^(位置1)))模块底座
在Python中:
def FindInPlace(number, base, place):
return number//base**(place-1) % base
如何将位置输入到函数中?例如,如果我想要0x3AF中的第一个数字,我可以调用get\u value\u of_place(0x3AF,16,256)吗?可以用两种方法之一指定位置。在我给出的示例中,您可以将其作为2(第二位)传入或者仅仅是10。我应该指定数字是以数字形式传递的,而不是字符串表示法。我编辑了这个问题以反映这一点。你确定它是一个基于一的索引吗?我认为place_值(10,10,1)将返回1,而不是0…是的,我没有使用它获得预期的行为。好吧,修复非常简单;只需说for(int-place\u index=1;…)
place\u值(1120,10,1)返回2。我认为你偏离了基数的一个因素。呃,我应该说从零开始的索引。Mea-culpa.Perfect。双斜杠有什么作用?双斜杠是“floor division”。它相当于int(floor(a/b)),无需进行任何中间浮点运算。
int getPlace(float x, float place) {
return (int)(x/place) % 10;
}
place = getPlace(1120,10);
otherPlace = getPlace(0.1120,1e-3);
int place_value(int value, int base, int place)
{
int value_in_place= value;
for (int place_index= 1; place_index<place; ++place_index)
{
value_in_place/=base;
}
return value_in_place % base;
}
import java.math.BigInteger;
...
private static char placeValue(int value, int base, int place) {
BigInteger bigValue = BigInteger.valueOf(value);
String baseString = bigValue.toString(base);
int numDigits = baseString.length();
int digitIndex = numDigits - place;
char digit = baseString.charAt(digitIndex);
return digit;
}
def FindInPlace(number, base, place):
return number//base**(place-1) % base