蓝桥杯_特殊回文数

问题描述
  123321是一个非常特殊的数,它从左边读和从右边读是一样的。
  输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
  输入一行,包含一个正整数n。
输出格式
  按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
  1<=n<=54。

自己写的超时了...伤心

#include<iostream>
#include<string>
#include<sstream>
using namespace std;

bool judge(int n)
{
	string temp;
	stringstream ss;
	ss << n;
	ss >> temp;
	int len = temp.size();
    for(int i = 0; i < len/2; i++)
    {
    	if(temp[i] != temp[len-i-1])
    		return false;
    }
    return true;
}
bool issum(int num, int sum)
{
	int _sum = 0;
	while(num != 0)
	{
		_sum += num%10;
		num /= 10;
	}
	return _sum == sum;
}
int main(){
    int sum;
    cin >> sum;
    for(int i = 10000; i <= 999999; i++)
    {
		if(judge(i)&& issum(i, sum))
			cout << i << endl;
    }
    return 0;
}

改进了一下

#include<iostream>
#include<string>
#include<sstream>
using namespace std;

int main(){
    int sum;
    cin >> sum;
    int num, reverse, n;
    for(int i = 10000; i <= 999999; i++)
    {
		num = i;
		reverse = 0;
		n = 0;
		while(num != 0){
			reverse = reverse*10 + num%10;
			n += (num%10);
			num/=10;
		}
		if(sum == n && reverse == i)
			cout << i << endl;
		
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41282102/article/details/88190993