0

对于给定的数字

unsigned int a = 1203;

对于上述示例,仅增加最高有效十进制数字

a = 2203;

如何做到这一点?

我是这样开始的

for (n=a; n; n/=10){ b = n%10;} 

这给了 msb 然后增加 b++;

但未能放回整数?

有没有像 a&0xf000 这样的替代方法,它给出 msb 但整数可以是 0 - INT_MAX 范围内的任何值?

4

3 回答 3

4

你实际上非常接近。

int x = 1;
for (n=a; n; n/=10) {
    x *= 10;
} 
a += x;
于 2013-07-23T11:56:54.237 回答
1

没有额外变量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;
于 2013-07-23T12:20:20.950 回答
0

唯一的解决方案是计算出你有多少位数(通常除以 10 - 或任何底数) - 当你有最高位数时,将其加 1,然后重新组合数字(或找出什么number 比最高位数多 1,但您仍然需要知道您有多少位数)。

于 2013-07-23T11:57:42.617 回答