genzai0の日記

にっき

桁数えで文字列の長さを取る僕を含めた全人類へ。

概略

日記です。

近況報告がしたいのと簡単な桁の問題を解いたので書いておきます。
なんてことはない馬鹿どものための対数の計算です。
(桁/D/Pとかそんな高度なことは書いてません)
半分は「文字列の長さを取って桁数えとする」という暴挙をやめるための回り道です。

Goを始めた

インターン初給料祝いに、自分にオライリーのgoインタプリタの本を買いました。 買ったはいいもののGoなんて書いたことないのでまずTour of goをやってます。

今は就職につながるようなインターンを探しているのですが、何もしない・できないで有名な僕なのでなかなか応募できるところがありませんね。 何か成果物の一つでもあればいいのですが。

かっこいいサムネでV/O/Y/A/G/E Groupのインターンを見つけたけど、もう申し込み期限過ぎてたしね。もっと早く動けばよかったね。
...メ/ル/カ/リインターン受かるといいなぁ。

単純な桁数え

goの練習としてpaizaをやっていたらぶち当たったので、それについて書く。
断りがない限りpythonのコードです。

「任意の数字nが与えられます。このnについて桁を出力してください」というような問題。

入力:

40289

出力:

5

5桁なので5です。(当たり前)
これを脳死で解くと、

n = input()
print(len(n))

になりますね。文字数数えりゃ桁になるやんけ!という暴力の世界。

ただ、僕の気持ち的に何となく算数っぽく書きたいのですね。そんな時に常用対数がぱっと思いつかなかった2年間です。

常用対数?

おじさんは高校数学ができないので、仲間のために書きます。今回の^(ハット)はべき乗の意味で使います。

常用対数とは、

「103 = 1000です。だから1000は103です。」

の後半部分の導出のために使います。なんかい10でわれるかな^^の気持ちです。

これを式に起こすとlog10(1000)です。(markdownで底を小さくできなかった)
答えはlog10(1000)=3です。
つまり何が言いたいのかというと、常用対数で桁が求まりますね。高校時代なんかの計算問題やった覚えがあるけど完全に忘却の彼方。

コードに起こす

工夫として、10のべき乗じゃないと端数が出るので丸めるのと、「1000のなかには10が3こあります」と一桁足りないので単純に一足す操作だけ忘れないようにしましょうね。

import math # log10

n = int(input())
print(int(math.log10(n))+1)

一応go

package main

import (
    "fmt"
    "math"
)

func main(){
    var f float64
    fmt.Scanln(&f)
    fmt.Println(int(math.Log10(f))+1)
}

対数くらいはパッと思いつくくらいの教養を身に着けたいな。