Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос новичка / 2 сообщений из 2, страница 1 из 1
22.07.2012, 13:40:07
    #37888297
SimbaRu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос новичка
Есть определённая задача.
Привожу решение в соответствии со своим начальным уровнем знаний и прошу, если не затруднит, показать более оптимальное и правильное решение.

Входное значение:
строка с числами, пробелами и переводами строк
456
0

999
111111111111111111111


Результат:
корень из введённых чисел в обратном порядке в формате 9.9999 без отсечения нулей

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
import java.math.BigDecimal;
import java.util.Scanner;
public class Test {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        String s[] = sc.nextLine().trim().split("\\s+");
        for(int i = s.length - 1; i > -1; i--) {
            System.out.println(BigDecimal.valueOf(Math.sqrt(Double.parseDouble(s[i]))).setScale(4,BigDecimal.ROUND_HALF_DOWN).doubleValue());
        }
    }
}



Вопросы:
1. как строку с пробелами и переводами строк загнать в массив?
2. как вывести число в нужном формате без отсечения нулей?
3. как максимально правильно и оптимально решить задачу?

Спасибо!
...
Рейтинг: 0 / 0
22.07.2012, 20:59:23
    #37888450
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос новичка
SimbaRu,

С ACM задача?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
...

/**
 * 
 * @author ivanov-void
 *
 */
public class Main {
	/**
	 * 
	 * @param args
	 */
    public static void main(String[] args) {
    	new Main().solve();
    }
    /**
     * 
     */
    public void solve() {    	
    	Scanner scanner = new Scanner(System.in);    	        
    	scanner.useDelimiter(Pattern.compile("[ \\f\\n\\r\\t\\v]+"));
    	List<Double> arrayList = new ArrayList();
    	while(scanner.hasNext()) 
    		if(scanner.hasNextDouble())
    			arrayList.add(scanner.nextDouble());    			
    		else break;        
    	
    	Collections.reverse(arrayList);
    	for(double d : arrayList) 
    		System.out.printf("%.4f\n", Math.sqrt(d));    		    	   
    }
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
1 2 3 4 5 6
	7	8	  9 10
11
12
   14 4    4 0 1 3
2 2 3 4 4 4 4 4
q
2,0000
2,0000
2,0000
2,0000
2,0000
1,7321
1,4142
1,4142
1,7321
1,0000
0,0000
2,0000
2,0000
3,7417
3,4641
3,3166
3,1623
3,0000
2,8284
2,6458
2,4495
2,2361
2,0000
1,7321
1,4142
1,0000



Решение на максимальную правильность и оптимальность не претендует, но на некоторые из ваших вопросов отвечает.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос новичка / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]