时间限制: 1Sec 内存限制: 128MB
题目描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入
输入一行,包含一个正整数n。
数据规模和约定:1<=n<=54。
输出
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
方法一:把数字转换成字符串处理
#include<iostream>
using namespace std;
bool fun(string x)
{
for(int i = 0; i < x.length() / 2; i++)
{
if(x[i] != x[x.length() - 1 - i]) return false;
}
return true;
}
int main()
{
string n;
cin >> n;
for(int i = 10000; i < 1000000; i++)
{
string x = to_string(i);
if(fun(x))
{
int sum = 0;
for(int j = 0; j < x.length(); j++)
{
sum = sum + x[j] - '0';
}
if(sum == stoi(n)) cout << x << endl;
}
}
return 0;
}
其中fun函数可以直接用resverse代替
方法二
直接处理数字
#include<iostream>
using namespace std;
int n;
bool fun(int x)
{
int k = x;
int rev = 0;
int t = 0;
int sum = 0;
while(x > 0)
{
t = x % 10;
x /= 10;
rev = rev * 10 + t;
sum += t;
}
if(sum == n && rev == k) return true;
else return false;
}
int main()
{
cin >> n;
for(int i = 10000; i < 1000000; i++)
{
if(fun(i)) cout << i << endl;
}
return 0;
}
第二种更好些