原题链接:蓝桥杯历届试题-回文数字
解题思路:
先写出判断是否为回文数的独立方法,然后再暴力求和。。
判断回文数的方法时本来中途想到可以用双指针,但是想想还是继续暴力了。。
参考代码:
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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复