公式

B - Base K 解説 by sugarrr


\(K\) 進法表記で与えられた \(S\) を、\(10\) 進法表記で表す関数を作ることを目標にします。
これは以下のようなアルゴリズムを実装すれば良いです。

\(ans =0\) とする。
\(S\) の先頭の桁から見ていき、順番に以下の操作を行う。

  • \(ans\)\(K\) 倍する
  • \(ans\) に今見ている桁の数字を加える

\(S\) の最後の桁まで見終わったとき、\(ans\) が求めたい値である。

最後に、\(10\) 進法表記に直した \(A,B\) を掛け合わせれば答えになります。

C++ の実装例も示すので参考にしてください。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;


ll f(string s,ll k){ // K 進法表記の S を、10 進法表記で表す関数
    ll ans=0;
    for(char x:s){
        ans *= k;
        ans += x - '0';
    }
    return ans;
}

signed main(){

    ll k;
    string a,b;
    cin>>k>>a>>b;
    ll A = f(a,k);
    ll B = f(b,k);
    cout<< A * B <<endl;

    return 0;
}

投稿日時:
最終更新: