結果

問題 No.3264 岩井数
コンテスト
ユーザー HikaruKonno
提出日時 2025-11-22 16:21:06
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
TLE  
実行時間 -
コード長 1,626 bytes
コンパイル時間 835 ms
コンパイル使用メモリ 87,596 KB
実行使用メモリ 19,016 KB
最終ジャッジ日時 2025-11-22 16:21:14
合計ジャッジ時間 8,085 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample -- * 2
other TLE * 1 -- * 29
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <iostream>
#include <vector>
using namespace std;

int GetDigit(int);
bool IsPalindromicNumber(int);
bool IsIwaiNumber(int);

int main()
{
	// 入力
	int input;
	int cnt = 2;
	cin >> input;

	while (cnt <= 1000000000)
	{
		long long num = cnt * input;

		if (num < 1000000000)
		{
			++cnt;
			continue;
		}

		if (IsIwaiNumber(num) && num % input == 0)
		{
			cout << num << endl;
			break;
		}
		++cnt;
	}

	return 0;
}

/// <summary>
/// 岩井数か判定し、返す
/// </summary>
/// <param name="input"></param>
bool IsIwaiNumber(int input)
{
	// 奇数では回文数 + 9の岩井数の条件に当てはまらないので終了
	if (GetDigit(input) % 2 == 1)
	{
		return false;
	}

	// 1桁目が9でなかったら岩井数ではないので終了
	if (input % 10 != 9)
	{
		return false;
	}

	return IsPalindromicNumber(input / 10);
}

/// <summary>
/// 整数の桁数を取得する関数
/// </summary>
/// <param name="num">取得したい桁数の整数</param>
/// <returns>整数の桁数</returns>
int GetDigit(int num)
{
	int digit = 1;
	while ((num /= 10) != 0)
	{
		++digit;
	}

	return digit;
}

/// <summary>
/// 回文かどうか
/// </summary>
/// <param name="number">チェックしたい整数</param>
/// <returns>回文だったら true</returns>
bool IsPalindromicNumber(int number)
{
	vector<int> v;

	while (number > 0)
	{
		// 先頭に数字の1桁目を代入
		v.push_back(number % 10);
		number /= 10;
	}

	// 前半と後半を比較
	int len = v.size();
	for (int i = 0; i < len / 2; ++i)
	{
		if (v[i] != v[len - 1 - i])
		{
			return false;
		}
	}

	return true;
}

0