Я работаю над проблемой полного поиска и просмотрел код, но не мог понять, почему моя программа продолжает приходить с ошибкой пустого выходного файла. Может ли кто-нибудь помочь мне выяснить, почему это происходит? Ниже приводится постановка задачи, а затем мой код.
ПОСТАНОВКА ЗАДАЧИ : Палиндромы - это числа, которые читаются одинаково вперед и назад. Число 12321 является типичным палиндромом.
Учитывая числовое основание B (2 <= B <= 20 основание 10), выведите все целые числа N (1 <= N <= 300 основание 10) так, чтобы квадрат N был палиндромным при выражении в основании B; также напечатайте значение этого палиндромного квадрата. Используйте буквы «А», «В» и т. Д. Для обозначения цифр 10, 11 и т. Д. </p>
Выведите число и квадрат в основании B.
МОЙ КОД:
#include <iostream>
#include <cmath>
#include <algorithm>
#include <fstream>
#include <string>
using namespace std;
//utility function to raise number to a power
int power(int first, int second)
{
int total = 1;
for (int i = 0; i < second; i++)
{
total *= first;
}
return total;
}
//convert the number to the proper base
int convert(string num, int base1)
{
int sum = 0;
for (int i = num.size() - 1; i >= 0; i--)
sum += num[i] * power(base1, num.size() - i);
return sum;
}
//test if converted number is a palindrome
bool is_pal(int number)
{
//if the #ofdigits is even
if (number % 2 == 0)
{
int mid = (to_string(number).size()) / 2;
string str_num = to_string(number);
string half1;
for (int i = 0; i < mid; i++)
half1 += str_num[i];
string half2;
for (int i = str_num.size()-1; i > mid-1; i--)
half2 += str_num[i];
if (half1 == half2)
return true;
return false;
}
//if the #ofdigits is odd
else
{
int mid1 = (to_string(number).size() - 1) / 2;
int mid2 = (to_string(number).size() + 1) / 2;
string str_num = to_string(number);
string half1;
for (int i = 0; i < mid1; i++)
{
half1 += str_num[i];
}
string half2;
for (int i = str_num.size()-1; i > mid2-1; i--)
{
half2 += str_num[i];
}
if (half1 == half2)
return true;
return false;
}
}
int main()
{
ofstream fout("palsquare.out");
ifstream fin("palsquare.in");
int base;
fin >> base;
for (int i = 1; i < 300; i++)
{
if (is_pal(convert(to_string((power(i, 2))), base)))
{
fout << convert(to_string(i), base) << " " << convert(to_string(power(i, 2)), base) << "\n";
}
}
return 0;
}