原题链接:蓝桥杯历届试题-回文数字
解题思路:
先写出判断是否为回文数的独立方法,然后再暴力求和。。
判断回文数的方法时本来中途想到可以用双指针,但是想想还是继续暴力了。。
参考代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
boolean flag = false; //设立标记 看看最后有没有输出 没有就返回-1
while (scanner.hasNext()) {
int a = scanner.nextInt();
Main mm = new Main();
int head = 10000; //五位数字第一个
int tail = 999999;//六位数字最后一个
for(int j=head; j<=tail; j++){
//先判断能不能满足和为n
int nums = j;
int sum = 0;
while(nums != 0){ //每一位相加
sum += nums%10;
nums = nums/10;
}
if(sum != a){ //如果不等于输入
continue;
}else{
if(mm.isReverse(j)){
System.out.println(j);
flag = true;
}else{
continue; //跳出当前循环
}
}
}
if(!flag){
System.out.println(-1);
}
}
}
//定义判断是否为回文数的方法
public boolean isReverse(int num){
int res = num;
int count=1; //计数 有多少位
while(res/10 != 0){
res = res/10;
count ++;
}
int[] arr = new int[count/2];
for (int i=0; i<count/2; i++){
arr[i] = num%10;
num = num/10;
}
if(count%2 != 0){ //判断单数还是双数
num = num/10; //单数的话就先进一位
for(int i=(count/2)-1; i>=0; i--){
if(arr[i] != num%10){
return false;
}else{
num = num/10;
}
}
}else{
for(int i=(count/2)-1; i>=0; i--){
if(arr[i] != num%10){
return false;
}else{
num = num/10;
}
}
}
return true;
}
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复