标签: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入门,各种踩坑,有空更新
标签:exti str i++ 输入数据 system 踩坑 比较 can 吐槽
原文地址:https://www.cnblogs.com/xiaocainiaohaha/p/9513192.html