yokobuttonの不定期で競技プログラミングをするブログ

不定期で解けた競技プログラミングコンテストの問題を載せています。

AtCoder Beginner Contest 220 B - Base K

問題の要約
 整数A,BがK進法表記で与えられる。
 A*Bを10進法表記で出力しろ。
制約
 1<=K<=10
 1<=A,B<=10^5
入力
 K
 A B
考え方
 1,A,Bを10進法に直してからA*Bを出力すればよい。
 2,K進法のXを10進法に直す方法。
  K進法の第一位をX1として10進法に直すとX1*(K^0)となる。
  K進法の第i位をXiとして10進法に直すとXi*(K^(i-1))となる。
  これをすべて足すと10進法のXになる。

実際のプログラム
#include<iostream>
#include<cmath>

using namespace std;

long long baseKto10(long long K, long long X){
  long long base10_X = 0;
  long long i = 0;
  while(X != 0){
    long long Xi = X % 10;
    base10_X += Xi*pow(K,i);
    X /= 10;
    i++;
  }
  return base10_X;
}

int main(){
  long long K;
  cin >> K;
  long long A,B;
  cin >> A >> B;
  
  A = baseKto10(K,A);
  B = baseKto10(K,B);
  
  cout << A * B << endl;
  
  return 0;
}