符号なし10進整数の桁数を求める関数 unsigned GetDigit(unsigned)
を作る。
ただし、引数として0が与えられることはないものとする。
10で割る
整数引数を、0になるまで10で割り続ける。割った回数が桁数。
unsigned GetDigit(unsigned num){
unsigned digit = 0;
while(num != 0){
num /= 10;
digit++;
}
return digit;
}
常用対数を使う
自然数 $a$ について、$\mathrm{floor}(\mathrm{log}_{10}({a})+1)$ は $a$ の10進桁数である。
unsigned GetDigit(unsigned num){
return log10(num)+1;
}
文字列操作を利用して数える
人間の数え方に近い方法。
C
(/dev/null
みたいなものはCにないのかなあ...)
#define BUFSIZE 100
unsigned GetDigit(unsigned num){
char buf[BUFSIZE];
return sprintf(buf, "%u", num);
//sprintfは出力に成功した場合、出力した文字数を返す
}
C++
unsigned GetDigit(unsigned num){
return std::to_string(num).length();
}