public static String add(String a,String b){ StringBuilder sb=new StringBuilder(); int x=0; int y=0; int pre=0;//进位 int sum=0;//存储进位和另两个位的和 while(a.length()!=b.length()){//将两个二进制的数位数补齐,在短的前面添0 if(a.length()>b.length()){ b="0"+b; }else{ a="0"+a; } } for(int i=a.length()-1;i>=0;i--){ x=a.charAt(i)-'0';//101 y=b.charAt(i)-'0';//001 sum=x+y+pre;//从低位做加法 if(sum>=2){ pre=1;//进位 sb.append(sum-2); }else{ pre=0; sb.append(sum); } } if(pre==1){ sb.append("1"); } return sb.reverse().toString();//翻转返回 } public static void main(String[] args) { Scanner sc=new Scanner(System.in); while(true){ int num=sc.nextInt(); long startTime=System.currentTimeMillis(); int count=0; for(int i=1;i<=num;){ count++; i=Integer.parseInt(add(i+"","1")); } System.out.println(count); //执行方法 long endTime=System.currentTimeMillis(); float excTime=(float)(endTime-startTime)/1000; System.out.println("执行时间:"+excTime+"s"); } }