递增给定整数的单个数字(msb)

时间:2013-07-23 11:47:57

标签: c++ c

对于给定的数字

unsigned int a = 1203;

仅对上面的示例

增加最高有效十进制数字
a = 2203;

如何实现这一目标?

我开始喜欢这个

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

这给msb然后递增b ++;

但未能将整个数字放回去?

有没有像& 0xf000这样的替代品给msb但是整数可以是0到INT_MAX范围内的任何东西吗?

3 个答案:

答案 0 :(得分:4)

你实际上非常接近。

int x = 1;
for (n=a; n; n/=10) {
    x *= 10;
} 
a += x;

答案 1 :(得分: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;

答案 2 :(得分:0)

唯一的解决方案是弄清楚你有多少位数(通常除以10 - 或者基数是什么) - 当你有最高位数时,加1,然后重新组合数字(或弄清楚最高位数是多少1,但你仍然需要知道你有多少位数。