はまやんはまやんはまやん

hamayanhamayan's blog

6.0*10^23 [yukicoder No.668]

https://yukicoder.me/problems/no/668

解法

https://yukicoder.me/submissions/246532

やるだけなのだが、繰り上がりが発生するので面倒。
aはS[0]なので、a=S[0] - '0'
bはS[1]なので、b=S[1] - '0'
cは繰り上がりが発生しないとすると c=S.length()-1
問題は繰り上がりなのだが、S[2]が'5'以上なら繰り上がりが発生となる。
繰り上がりが発生するとbが1つ増える。
bが10となってしまったら、aを1増やしてb=0とする。
それでaが10となってしまったら、a=1,b=0として桁が増えるのでc+=1とする。
これで後は答える。

string S;
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> S;
    
    int a = S[0] - '0';
    int b = S[1] - '0';
    int c = S.length() - 1;

    if ('5' <= S[2]) {
        b++;
        if (10 <= b) {
            a++;
            b = 0;
            if (10 <= a) {
                a = 1;
                c++;
            }
        }
    }

    printf("%d.%d*10^%d\n", a, b, c);
}