左方向の小数または基数に依存しない整数を切り捨てるエレガントな方法はありますか?
たとえば、私は持っています:
unsigned int val1 = 17301;
アルゴリズムは、1 回の呼び出しで左から 1 (10 進数) 桁を切り捨てる必要があるため、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;
}
ありがとう!