洛谷-P1553 数字反转(升级版)(java)

不是情况没有考虑周全,是代码出现了部分错误
(=—=)

这道题考虑的情况非常多啊,都是跟0有关

修改了好久次,还有一个测试用例没有通过(95分。。。),今天下载测试用例的机会用完了,明天再看看是少考虑了哪一种情况(枯辽~~)
先附上今晚上(错误)的代码:

package _5_6;

import java.util.ArrayList;
import java.util.Scanner;

public class Fanzhuan_1553 {
	static ArrayList<Integer>  a = new ArrayList<>();
	static ArrayList<Integer>  b = new ArrayList<>();
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String s = sc.next();
		if(s.contains(".")) {
			String s1[] = s.split("\\.");
			char c1[] = s1[0].toCharArray();
			char c2[] = s1[1].toCharArray();
			char c[] = new char[c1.length+c2.length];
			for(int i=c1.length-1;i>=0;i--) {
				a.add(c1[i]-'0');
			}
			for(int i=c2.length-1;i>=0;i--) {
				b.add(c2[i]-'0');
			}
			while(a.get(0)==0) {
				if(a.size()==1) {//当只有一个0的时候就保留这一个0
					if(a.get(0)==0) {
						break;
					}
				}
				a.remove(a.get(0));
			}
			
			while(b.get(b.size()-1)==0) {
				if(b.size()==1) {
					if(b.get(b.size()-1)==0) {
						break;
					}
				}
				b.remove(b.get(b.size()-1));
			}
			for(int i=0;i<a.size();i++) {
				System.out.print(a.get(i));
			}
			System.out.print(".");
			for(int i=0;i<b.size();i++) {
				System.out.print(b.get(i));
			}
		}else if(s.contains("/")){
			String s1[] = s.split("/");
			char c1[] = s1[0].toCharArray();
			char c2[] = s1[1].toCharArray();
			char c[] = new char[c1.length+c2.length];
			for(int i=c1.length-1;i>=0;i--) {
				a.add(c1[i]-'0');
			}
			for(int i=c2.length-1;i>=0;i--) {
				b.add(c2[i]-'0');
			}
			while(a.get(0)==0) {
				if(a.size()==1) {
					if(a.get(0)==0) {
						break;
					}
				}
				a.remove(a.get(0));
			}
			while(b.get(0)==0) {
				if(b.size()==1) {
					if(b.get(0)==0) {
						break;
					}
				}
				b.remove(b.get(0));
			}
			for(int i=0;i<a.size();i++) {
				System.out.print(a.get(i));
			}
			System.out.print("/");
			for(int i=0;i<b.size();i++) {
				System.out.print(b.get(i));
			}
		}else if(s.contains("%")) {
			String s1[] = s.split("%");
			char c1[] = s1[0].toCharArray();
			char c[] = new char[c1.length];
			for(int i=c1.length-1;i>=0;i--) {
				a.add(c1[i]-'0');
			}
			
			while(a.get(0)==0) {
				if(a.size()==1) {
					if(a.get(0)==0) {
						break;
					}
				}
				a.remove(a.get(0));
			}
			
			for(int i=0;i<a.size();i++) {
				System.out.print(a.get(i));
			}
			System.out.print("%");
			
		}else {
			if(s.equals("0")) {
				System.out.println(0);
			}else {
				char c1[] = s.toCharArray();
				char c[] = new char[c1.length];
				for(int i=c1.length-1;i>=0;i--) {
					a.add(c1[i]-'0');
				}
				
				while(a.get(0)==0) {
					a.remove(a.get(0));
				}
				
				for(int i=0;i<a.size();i++) {
					System.out.print(a.get(i));
				}
			}
		}
	}
}

更正后得代码!!!

利用arrayList直接删除数字得remove()函数,里面的参数是下标!!参数是下标!!下标!!

在这个测试用例中5043020.060742102
之前的代码运行出来是 203405.212476把我小数点后得所有零都删掉了,因为我往remove放入得是0这个数字,而不是下标。所以它从左边遇到得第一个开始删除。
第一行 只是倒序
但是其他小数点前还有整数分数这样子没有出错的原因是因为: 只有当0是第一个元素得时候删除。。。所以 这个时候0==下标0,所以删掉了第一个0

正确代码!!!!



     
洛谷 / 评测记录 / 评测详情 
R18848814 评测详情



应用  
 题库 
 训练 
 比赛 
 记录 
 讨论 
糖炒栗子 
P1553 数字反转(升级版) 
Accepted 
100 
代码 
Java 8,2.55KB
提交时间 
2019-05-07 21:08:32
耗时/内存 
1961ms, 27536KB 
评测状态
Accepted  100 
用时: 1961ms / 内存: 27536KB
编译信息
编译成功
已添加清单
正在添加: Main.class(输入 = 2815) (输出 = 1410)(压缩了 49%)
测试点信息
#1
AC
92ms/13772KB
#2
AC
117ms/27536KB
#3
AC
113ms/16588KB
#4
AC
86ms/12472KB
#5
AC
121ms/13252KB
#6
AC
94ms/12304KB
#7
AC
91ms/12692KB
#8
AC
102ms/16840KB
#9
AC
96ms/12484KB
#10
AC
94ms/12396KB
#11
AC
105ms/17128KB
#12
AC
93ms/12368KB
#13
AC
89ms/12372KB
#14
AC
108ms/17024KB
#15
AC
90ms/12440KB
#16
AC
90ms/12464KB
#17
AC
107ms/16976KB
#18
AC
97ms/12324KB
#19
AC
87ms/12584KB
#20
AC
89ms/12468KB

测试数据下载
因为该记录状态(AC或CE等)不能提供数据下载。
洛谷免费提供该记录第一个非AC的输入输出数据下载;部分题目因为版权等原因,不开放数据下载。
24小时内,灰名允许下载2次(一对输入及输出算一次),蓝名允许下载4次,绿名6次,橙名8次,红名10次。
因近期有人注册大量垃圾账户滥用此规则试图盗取数据,现限制该功能仅限实名认证用户使用。 
源代码  复制   如何修改字体? 
import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    static ArrayList<Integer>  a = new ArrayList<>();
    static ArrayList<Integer>  b = new ArrayList<>();
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        if(s.contains(".")) {
            String s1[] = s.split("\\.");
            char c1[] = s1[0].toCharArray();
            char c2[] = s1[1].toCharArray();
            char c[] = new char[c1.length+c2.length];
            for(int i=c1.length-1;i>=0;i--) {
                a.add(c1[i]-'0');
            }
            for(int i=c2.length-1;i>=0;i--) {
                b.add(c2[i]-'0');
            }
            while(a.get(0)==0) {
                if(a.size()==1) {
                    if(a.get(0)==0) {
                        break;
                    }
                }
                a.remove(0);
            }
            
            while(b.get(b.size()-1)==0) {
                if(b.size()==1) {
                    if(b.get(b.size()-1)==0) {
                        break;
                    }
                }
                b.remove(b.size()-1);
            }
            for(int i=0;i<a.size();i++) {
                System.out.print(a.get(i));
            }
            System.out.print(".");
            for(int i=0;i<b.size();i++) {
                System.out.print(b.get(i));
            }
        }else if(s.contains("/")){
            String s1[] = s.split("/");
            char c1[] = s1[0].toCharArray();
            char c2[] = s1[1].toCharArray();
            char c[] = new char[c1.length+c2.length];
            for(int i=c1.length-1;i>=0;i--) {
                a.add(c1[i]-'0');
            }
            for(int i=c2.length-1;i>=0;i--) {
                b.add(c2[i]-'0');
            }
            while(a.get(0)==0) {
                if(a.size()==1) {
                    if(a.get(0)==0) {
                        break;
                    }
                }
                a.remove(0);
            }
            while(b.get(0)==0) {
                if(b.size()==1) {
                    if(b.get(0)==0) {
                        break;
                    }
                }
                b.remove(0);
            }
            for(int i=0;i<a.size();i++) {
                System.out.print(a.get(i));
            }
            System.out.print("/");
            for(int i=0;i<b.size();i++) {
                System.out.print(b.get(i));
            }
        }else if(s.contains("%")) {
            String s1[] = s.split("%");
            char c1[] = s1[0].toCharArray();
            char c[] = new char[c1.length];
            for(int i=c1.length-1;i>=0;i--) {
                a.add(c1[i]-'0');
            }
            
            while(a.get(0)==0) {
                if(a.size()==1) {
                    if(a.get(0)==0) {
                        break;
                    }
                }
                a.remove(0);
            }
            
            for(int i=0;i<a.size();i++) {
                System.out.print(a.get(i));
            }
            System.out.print("%");
            
        }else {
            if(s.equals("0")) {
                System.out.println(0);
            }else {
                char c1[] = s.toCharArray();
                char c[] = new char[c1.length];
                for(int i=c1.length-1;i>=0;i--) {
                    a.add(c1[i]-'0');
                }
                
                while(a.get(0)==0) {
                    a.remove(0);
                }
                
                for(int i=0;i<a.size();i++) {
                    System.out.print(a.get(i));
                }
            }
        }
    }
}
 

继续加油~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值