码迷,mamicode.com
首页 > 其他好文 > 详细

找到比输入正整数大的最小包含连续2333的数

时间:2018-08-21 19:02:45      阅读:297      评论:0      收藏:0      [点我收藏+]

标签:exti   str   i++   输入数据   system   踩坑   比较   can   吐槽   

题目是酱式的

给你一个小于 60 位的整数 p ,求大于 p 的最小的数 p1 ,使得 p1 中包含数 2333 。

 

编出的程序是酱式的

 1 public class twothreethreethree {
 2     public static void main(String[] args) {
 3 
 4         int caseNum=0;
 5         //System.out.print("输入测试用例个数");
 6         Scanner sc=new Scanner(System.in);
 7         caseNum=sc.nextInt();
 8         for(int i=1;i<=caseNum;i++){
 9 
10             long input=sc.nextLong();
11             int count=0;
12             long result=input*input+2333;
13             long result1=0;
14 
15 //            计算输入数字的位数,也可以转换成字符串使用.length()方法进行转换
16             long temp=input;
17             while(temp!=0){
18                 count++;
19                 temp/=10;
20             }
21 //          System.out.println("输入数据位数是:"+count);
22 
23             if (count<=3) result=2333;
24             if(count==4) {
25                 if (input>2333)result=12333;
26                 else result=2333;
27             }
28             if(count>4){
29 
30                 while(count!=3){
31                     long numOfBit=input/(int)Math.pow(10,count-1)%10;
32                     temp=0;
33                     long tempNumOfBit=numOfBit;
34                     int tempCount=count;
35                     for(int j=3;j>=0;j--) {
36                         tempNumOfBit=input/(int)Math.pow(10,tempCount-1)%10;
37                         temp += tempNumOfBit * (Math.pow(10, j));
38                         tempCount--;
39                     }
40 //                    System.out.println("第"+count+"位数为"+numOfBit);
41                     if(temp<2333)result1=(2333 - temp) * ((int) Math.pow(10, count - 4)) + input;
42                     if(temp == 2333){
43                         result=input;
44                         break;
45                     }
46                     if(temp>2333)result1=(2333 - temp) * ((int) Math.pow(10, count - 4)) + (int)Math.pow(10,count)+input;
47                     if(result1<result)result=result1;
48                     count--;
49                 }
50 
51             }
52             System.out.printf("Case #%d: %d\n",i,result);
53         }
54 
55     }
56 }

代码比较弱轻喷,思路就是小于5位的数中小于2333的数对应的p1是2333,大于2333的数对应的p1是12333,大于等于5位的数由高位到低位每次取4位得到p1,最后的p1是最小的p1.自己测试通过。结果在系统上测试挂了,原因是没有看到这句话:小于 60 位的整数 p (这里不得不吐槽一下某学校的系统,保密测试用例干啥,排查了好久才发现这个问题),作为一个用java强行答题的小白去百度之后才知道BigInteger类无限精度可以60位整数的输入,接下来就开始了苦逼的java入门,各种踩坑,有空更新

找到比输入正整数大的最小包含连续2333的数

标签:exti   str   i++   输入数据   system   踩坑   比较   can   吐槽   

原文地址:https://www.cnblogs.com/xiaocainiaohaha/p/9513192.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!