palsqure.cpp
来自「找出1——300以内的数和它的平方都是对称的数字。 例如:2 4 3 9 」· C++ 代码 · 共 96 行
CPP
96 行
/*
ID: day_bea3
PROG: palsquare
LANG: C++
*/#include <fstream>
#include <iostream>
#include <assert.h>
using namespace std;
const int MAXLEN = 17;
int translate(const int base, const int source, char rel[])
{
int i = 0;
int src =source;
while (src > 0)
{
rel[i] = src % base + 48;
if (rel[i] > '9')
{
rel[i] += 7;
}
src /= base;
i++;
}
int j = 0;
char temp = '\0';
for (; j < i / 2; j++)
{
temp = rel[j];
rel[j] = rel[i - j - 1];
rel[i - j - 1] = temp;
}
return i;
}
bool IsPalindromic(char rel[], int len)
{
int i = 0;
for (; i < len/2; i++)
{
if (rel[i] != rel[len - i -1])
{
return false;
}
}
return true;
}
bool GotIt(int base)
{
char num[MAXLEN] = {0};
char numsqure[MAXLEN] = {0};
ofstream fout("palsquare.out");
assert(fout);
int len = 0;
int i = 0;
for (i = 1; i <= 300; i++)
{
len = translate(base, i * i, numsqure);
if (IsPalindromic(numsqure, len))
{
translate(base, i, num);
fout<<num<<" "<<numsqure<<"\n";
}
}
fout.close();
return false;
}
int main()
{
ifstream fin("palsquare.in");
assert(fin);
int base = 0;
fin>>base;
assert(base >= 2 && base <= 20);
GotIt(base);
fin.close();
return 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?