ARC 106 A問題 "106" C++ 実装について
解決したいこと
以下のようなプログラムで提出したところ、インプットN=359414837200037396
でWA
となってしまいます。
自作で指数を計算する関数powint
を与えてやったのですが、なぜこのようなことが起きるのか理解できません。
発生している問題・エラー
答えは-1
とならなければなりませんが、1 28
とでます。
解決策
既存のライブラリpow
では桁落ちするのは理解していたので、以下のlong doubleを返却するpowl
にすれば解決します。
A.cpp
#include <bits/stdc++.h>
#include <unistd.h>
using lli = long long int;
using namespace std;
#define Rep(i, n) for(int i = 0; i < (int)n; i++)
#define Repi(i, a, b) for(int i = (int)a; i < (int)b; i++)
#define Repv(i, vec) for(int i : vec)
#define Sort(vec) sort(vec.begin(), vec.end())
template<typename _T> void Out(_T x) { cout << x << endl; }
template<typename _T> void PrintVec(vector<_T> vec) {
Rep(i, vec.size()) { cout << vec[i] << " "; }
cout << endl;
}
template<typename _T> int Minval(_T vec) {
return *min_element(vec.begin(), vec.end());
}
template<typename _T> int Maxval(_T vec) {
return *max_element(vec.begin(), vec.end());
}
template<typename _T> int Sumvec(_T vec) {
int sum=0; Repv(i, vec) sum+=i; return sum;
}
#define MAXV 50
long long intpow(long long base, long long a){
long long ans = 1;
while(a>0){ans*=base; a--;}
return ans;
}
void _main() {
// Input
long long N;
cin >> N;
Repi(A, 1, MAXV){
Repi(B, 1, MAXV){
long long powval = powl(3,A) + powl(5,B);
//pause();
//cout << A << " " << B << " " << powval << endl;
if(powval==N){cout << A << " " << B << endl; return;}
}
}
Out(-1);
}
int main() {
_main();
return 0;
}
0