Don't use (int)log10(n)+1 to count the length of n.
It may cause error because of accuracy.
# | User | Rating |
---|---|---|
1 | tourist | 3985 |
2 | jiangly | 3814 |
3 | jqdai0815 | 3682 |
4 | Benq | 3529 |
5 | orzdevinwang | 3526 |
6 | ksun48 | 3517 |
7 | Radewoosh | 3410 |
8 | hos.lyric | 3399 |
9 | ecnerwala | 3392 |
9 | Um_nik | 3392 |
# | User | Contrib. |
---|---|---|
1 | cry | 169 |
2 | maomao90 | 162 |
2 | Um_nik | 162 |
4 | atcoder_official | 161 |
5 | djm03178 | 158 |
6 | -is-this-fft- | 157 |
7 | adamant | 155 |
8 | Dominater069 | 154 |
8 | awoo | 154 |
10 | luogu_official | 150 |
Don't use (int)log10(n)+1 to count the length of n.
It may cause error because of accuracy.
Name |
---|
Instead, try this:
It's just a few lines of code. I know speed is crucial here, but this can be typed in 15 seconds. Using floating point arithmetic for things that can be done with integer arithmetic is not recommended.
Here's an even faster way :)
Integer.valueOf(x).toString().length();
(""+x).toString().length();
even faster and in C:
len=sprintf(buf,"%d",x);
Quite elegant, but, the code i posted works in every base and takes a lot less time because it doesn't rely on string operations. Whatever suits people's needs.
Yours is shorter, but it takes longer to type.
Integer.toString(x).length();
Integer.toString(x,17).length(); // Different base
Since it's a string operation I use it when I know it won't effect too much on the speed.