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); } }