0

特定の数に対して

unsigned int a = 1203;

上記のサンプルの場合、最上位の 10 進数のみをインクリメントします

a = 2203;

これはどのように達成できますか?

私はこのように始めました

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

これにより、msb が与えられ、次に b++ がインクリメントされます。

しかし、整数を元に戻すことができませんでしたか?

msb を与える a&0xf000 のような代替手段はありますが、整数は 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分割を削除し、その後に 1 つだけ追加するため、わずかに高速になるはずです。

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 に答える