gpt4 book ai didi

c++ - 截断留在 C++ 或通用示例中的整数

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:10:30 25 4
gpt4 key购买 nike

有没有一种优雅的方法可以在左方向十进制或与基数无关的方向上截断整数?

例如我有:

unsigned int val1 = 17301;

该算法必须通过一次调用从左侧截断 1 个(十进制)数字,因此对于 val1,4 次调用的结果将是:

truncate_left(17301) returns 7301
truncate_left(7301) returns 301
truncate_left(301) returns 1
truncate_left(1) returns 0

返回值也是整数。 c/c++ 解决方案最适合我。任何外部(和/或)数学库都不是惠康,我对通用的方法很感兴趣

@ATaylor我丑陋的解决方案是:

unsigned int truncate_left(unsigned int val) {
unsigned int divider = 1000000000, dec;
for(unsigned int pow10 = 10; pow10 > 0; pow10--) {
if(val % divider != val) {
dec = val / divider;
printf("dec = %d\n", divider);
break;
}
divider /= 10;
}
return val - dec * divider;
}

谢谢!

最佳答案

我不确定为什么@MM 删除了他差不多的答案,但这是它的更正版本:

int truncate_left(int x)
{
int c = (int)log10(x);
while (x > pow(10,c)) x -= pow(10,c);
return x;
}

如果使用 math.h 和 -lm 有问题,请用这些替换 log10 和 pow:

int mylog10(int val)
{
if (val > 9) return 1 + mylog10(val/10);
return 1;
}

int mypow(int val, int pwr)
{
if (pwr > 0) return val * mypow(val, pwr-1);
return val;
}

关于c++ - 截断留在 C++ 或通用示例中的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16168129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com