Leetcode - 소수 까지 점수

10861 단어 알고리즘
소수점 까지 점수
제목 링크: 점수 부터 소수 까지
생각:
인터넷 에서 이 문제 에 대한 해답 은 사고방식 이 대동소이 하 다여 기 는 하나의 맵 을 통 해 여 수 를 기록 해 야 합 니 다. 순환 소수 의 특징 은 나머지 가 같은 결과 가 나 오 는 것 입 니 다. 저 장 된 여 수 를 만 났 을 때 순환 이 생 겼 다 는 것 을 설명 합 니 다. 그 위치 에 '(' 만 추가 하면 됩 니 다. 결과 에 ')' 5 를 추가 하 는 것 이 가장 좋 은 것 이 아 닙 니 다. 하 나 는 순환 에 소 수 를 추가 할 수 있 는 부분 을 바 꿀 수 있 습 니 다.기록 순환 을 통 해 위 치 를 만 들 고 괄호 를 추가 합 니 다. 둘째, 질서 있 는 맵 을 무질서 한 HashMap 으로 대체 합 니 다.
	public static String fractionToDecimal(int numerator, int denominator) {
		
		//        
		if(numerator==0) {
			return "0";
		}
		//       -1  ,0  
		int flag = (numerator^denominator)>>31;
        //         
		long num = Math.abs((long)numerator),den = Math.abs((long)denominator);
		long Int = num/den;
		long remainder = num%den;
		StringBuffer res = new StringBuffer();
		res.append(flag==-1?"-"+Int:Int);
		if(remainder==0) {
			//    
			return res.toString();
		}
		//    ,       
		res.append(".");
		//        ,           
		//      Map       
		//                 
		Map<Long,Long> map = new LinkedHashMap<Long,Long>();
		long div = 0;
		while(remainder!=0) {
			remainder *= 10;
			//   
			div = remainder/den;
			map.put(remainder/10,div);		//       
			remainder %= den;
			if(map.containsKey(remainder)) {
				//     ,         
				//                ,     
				
				int fla = 0;
				for(Long key:map.keySet()) {
					if(fla==0&&key!=remainder) {
						res.append(map.get(key));
					}
					if(key==remainder) {
						fla = 1;res.append("(");
					}
					if(fla==1) {
						res.append(map.get(key));
					}
				}
				res.append(")");
				return res.toString();
			}
		}
		for(Long key:map.keySet()) {
			res.append(map.get(key));
		}
		return res.toString();
    }

좋은 웹페이지 즐겨찾기