海湾合作委员会 G++ 9
这段代码:
class foo {
int bar[] = {111, 123};
};
Run Code Online (Sandbox Code Playgroud)
产生有关灵活数组的初始值设定项的错误。但这一个:
class foo {
int bar[2] = {111, 123};
};
Run Code Online (Sandbox Code Playgroud)
正常编译。有什么解决方法可以不计算我输入的值吗?
有没有一种优雅的方法来截断左方向十进制或基数无关的整数?
例如我有:
unsigned int val1 = 17301;
Run Code Online (Sandbox Code Playgroud)
该算法必须通过一次调用从左侧截断 1 个(十进制)数字,因此对于 val1,4 次调用的结果将是:
truncate_left(17301) returns 7301
truncate_left(7301) returns 301
truncate_left(301) returns 1
truncate_left(1) returns 0
Run Code Online (Sandbox Code Playgroud)
返回值也是整数。c/c++ 解决方案最适合我。任何外部(和/或)数学库都不受欢迎,我对通用方法感兴趣
@ATylor 我丑陋的解决方案是:
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;
}
Run Code Online (Sandbox Code Playgroud)
谢谢!