結果

問題 No.2954 Calculation of Exponentiation
ユーザー 👑 binap
提出日時 2024-05-22 09:28:06
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 932 bytes
コンパイル時間 1,818 ms
コンパイル使用メモリ 193,800 KB
最終ジャッジ日時 2025-02-21 16:24:55
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample WA * 3
other WA * 28
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<bits/stdc++.h>
#define rep(i,n) for(int i=0;i<n;i++)
using namespace std;

void varify(bool is_pm){
	string s;
	cin >> s;
	int n = s.size();
	if(is_pm){
		if(s[0] == '-'){
			string t;
			rep(i, n - 1) t += s[i + 1];
			swap(s, t);
			n--;
		}
	}
	assert(n >= 6);
	int dot = -1;
	rep(i, n){
		if(s[i] == '.'){
			// multiple . is NG
			if(dot != -1) assert(false);
			dot = i;
			continue;
		}
		assert(s[i] - '0' >= 0 && s[i] - '0' <= 9);
	}
	// just integer is NG
	assert(dot != -1);
	
	// .0 .00 .000 is NG
	assert(dot == n - 5);
	
	// 00.0000 is NG
	int zero = 0;
	rep(i, dot){
		if(s[i] == '0') zero++;
		else zero -= 100;
	}
	assert(zero <= 1);
	long long INT = 0;
	rep(i, n){
		if(s[i] == '.') continue;
		INT *= 10;
		INT += s[i] - '0';
	}
	// 0 < A <= 1e9, -1e9 <= B <= 1e9
	if(is_pm) assert(0 <= INT <= 1000000000);
	else assert(0 < INT <= 1000000000);
}

int main(){
	varify(false);
	varify(true);
	
	return 0;
}
0