对于给定的数字
unsigned int a = 1203;
对于上述示例,仅增加最高有效十进制数字
a = 2203;
如何做到这一点?
我是这样开始的
for (n=a; n; n/=10){ b = n%10;}
这给了 msb 然后增加 b++;
但未能放回整数?
有没有像 a&0xf000 这样的替代方法,它给出 msb 但整数可以是 0 - INT_MAX 范围内的任何值?
你实际上非常接近。
int x = 1;
for (n=a; n; n/=10) {
x *= 10;
}
a += x;
没有额外变量n的变体:
int x = 1;
while (x <= a/10) x *= 10;
a += x;
(编辑)这应该会稍微快一些,因为它删除了比较循环中的d除法并在其后仅添加了一个除法:
int x = 1;
while (x <= a) x *= 10;
x /= 10;
a += x;
唯一的解决方案是计算出你有多少位数(通常除以 10 - 或任何底数) - 当你有最高位数时,将其加 1,然后重新组合数字(或找出什么number 比最高位数多 1,但您仍然需要知道您有多少位数)。