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

hamayanhamayan's blog

100×100=1000 [yukicoder No.722]

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

解説

https://yukicoder.me/submissions/276740

暗算をするかどうかの条件が結構複雑なため、check関数で別途行うことにしている。
check関数では条件に合うかのチェックのために、何回10で割れたかをカウントしている。
チェック後の計算は特に問題ないだろう。

ll A, B;
//---------------------------------------------------------------------------------------------------
int check() {
    ll a = abs(A), b = abs(B);
    int acnt = 0, bcnt = 0;

    if (a == 0) return 0;
    if (b == 0) return 0;

    while (a % 10 == 0) a /= 10, acnt++;
    while (b % 10 == 0) b /= 10, bcnt++;

    if (a < 10 and 2 <= acnt and b < 10 and 2 <= bcnt) return 1;
    return 0;
}
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> A >> B;

    if (check()) {
        ll ans = A * B;
        ans /= 10;
        printf("%lld\n", ans);
    } else {
        ll ans = A * B;
        if (ans < -99999999 or 99999999 < ans) printf("E\n");
        else printf("%lld\n", ans);
    }
}