The number 3025 has a remarkable quirk: if you split its decimal representation in two strings of equal length (30 and 25) and square the sum of the numbers so obtained, you obtain the original number:
(30 + 25)2 = 3025
The problem is to determine all numbers with this property having a given even number of digits.
For example, 4-digit numbers run from 0000 to 9999. Note that leading zeroes should be taken into account. This means that 0001 which is equal to (00 + 01)2 is a quirksome number of 4 digits. The number of digits may be 2,4,6 or 8. Although maxint is only 32767 and numbers of eight digits are asked for, a well-versed programmer can keep his numbers in the range of the integers. However efficiency should be given a thought.
Input
The input of your program is a textflle containing numbers of digits (taken from 2,4,6,8), each number on a line of its own.
Output
The output is a textfile consisting of lines containing the quirksome numbers (ordered according to the input numbers and for each input number in increasing order).
Warning: Please note that the number of digits in the output is equal to the number in the corresponding input line : leading zeroes may not be suppressed.
Sample Input
2
2
Sample Output
00
01
81
00
01
81
问题链接:UVA256 Quirksome Squares
问题简述:(略)
问题分析:
看代码,不解释。
程序说明:(略)
参考链接:(略)
题记:(略)
AC的C++语言程序如下:
/* UVA256 Quirksome Squares */
#include <bits/stdc++.h>
using namespace std;
const int N = 5;
const int mods[] = {0, 10, 100, 1000, 10000};
vector<int> v[N];
void init()
{
for(int i = 0; i <= 9999; i++) {
int i2 = i * i;
for(int j = 0; j < N; j++)
if(i < mods[j]) {
int tmp = i2 / mods[j] + i2 % mods[j];
if(tmp == i) v[j].push_back(i2);
}
}
}
int main()
{
init();
int n, m;
while(~scanf("%d", &n)) {
m = n >> 1;
for(int i = 0; i < (int)v[m].size(); i++)
printf("%0*d\n", n, v[m][i]);
}
return 0;
}