Log 函数的实现,但用于表示为字符串 C 的数字
Implementation of Log function but for numbers represented as a string C
有没有办法在不将字符串转换为 int 的情况下实现日志函数 适用于字符串数字?
字符串编号示例:
字符 *stringNumber = "432"
该字符串仅代表整数(整数),但它们可以接近无限长
如果我的结果是浮点数,日志也应该 return 一个 int(表示为一个字符串)
我知道对于数字你可以实现:
int logn(int n, int x)
//n is the number , x is the base
{
if (n <= r-1)return 0;
return (1 + logn(n/x, x);
}
但是对于字符串我不知道该怎么做
您需要将字符串转换为数字
char * numStr = "2.7";
double num = strtod(numStr, NULL);
甚至您的示例函数中也有拼写错误。看来您的意思是 return n 的以 x 为底的对数的整数部分,并将 floor 函数应用于结果。要做到这一点,它必须是:
int logn(int n, int x) // n is the number, x is the base
{
if (n <= x - 1) return 0; // note: x, not r
return (1 + logn(n / x, x); // note: x, not 2 for the division
}
综上所述,我看不出有任何方法可以在不先将字符串化数字转换为数值的情况下对字符串化数字求 arbitrary-base 对数。如果你只想要一个以 10 为底的对数,这是可能的。
感谢@EricPostpischil 的回答
执行长除法,将输入数字除以基数并丢弃余数。重复这样做并计算重复次数产生对数(直到商小于一的重复次数是不大于对数的最大整数;
@pmg 的回答也是一个很好的方法,我认为
有没有办法在不将字符串转换为 int 的情况下实现日志函数 适用于字符串数字? 字符串编号示例: 字符 *stringNumber = "432" 该字符串仅代表整数(整数),但它们可以接近无限长 如果我的结果是浮点数,日志也应该 return 一个 int(表示为一个字符串)
我知道对于数字你可以实现:
int logn(int n, int x)
//n is the number , x is the base
{
if (n <= r-1)return 0;
return (1 + logn(n/x, x);
}
但是对于字符串我不知道该怎么做
您需要将字符串转换为数字
char * numStr = "2.7";
double num = strtod(numStr, NULL);
甚至您的示例函数中也有拼写错误。看来您的意思是 return n 的以 x 为底的对数的整数部分,并将 floor 函数应用于结果。要做到这一点,它必须是:
int logn(int n, int x) // n is the number, x is the base
{
if (n <= x - 1) return 0; // note: x, not r
return (1 + logn(n / x, x); // note: x, not 2 for the division
}
综上所述,我看不出有任何方法可以在不先将字符串化数字转换为数值的情况下对字符串化数字求 arbitrary-base 对数。如果你只想要一个以 10 为底的对数,这是可能的。
感谢@EricPostpischil 的回答 执行长除法,将输入数字除以基数并丢弃余数。重复这样做并计算重复次数产生对数(直到商小于一的重复次数是不大于对数的最大整数; @pmg 的回答也是一个很好的方法,我认为