Member 13954890 Ответов: 2

Как мне отсортировать цифры в порядке возрастания таким образом, чтобы ноль всегда приходил во 2-ю позицию без использования массива.


я
mport java.util.*;
public class sort1 {
	public static void main(String args[])
	{
		int num,sort=0;
		System.out.println("enter a no.\n");
		Scanner s=new Scanner(System.in);
		num=s.nextInt();
		for(int i=0;i<=9;i++)
		{
			int temp=num;
			while(temp>0)
			{
				int d=temp%10;
				
				if(d==i)
					sort=sort*10+d;
				
				temp=temp/10; 
				
			}
		}
		System.out.println(sort);
	}

}


Что я уже пробовал:

я пробую приведенный выше код, который работает нормально, но он не включает ноль.Я хочу, чтобы ноль был 2-й цифрой.

2 Ответов

Рейтинг:
1

Richard MacCutchan

Существует трудность в печати числа с одним значащим нулем, особенно если вы не знаете, есть ли ноль в числе для начала, и вы не знаете его длину. Самый простой способ сделать это-прочитать число как строку, а затем разбить его на символы и отсортировать символы в алфавитном порядке.


Member 13954890

- эй! Я хочу отсортировать его в порядке убывания.Поскольку я использую примитивный тип данных, я не могу использовать сортировку(arr.Collections.reversedorder).Тогда какова же альтернатива?Вот мой код:
импорт java.lang.*;
импорт java.util.*;

открытый класс sort_string
{
публичный статический пустота главный(строка[] аргументы)
{
//String result = "";
System.out.println("введите строку\n");

Сканер kbd = новый сканер(System.in);
Строковый ввод = kbd.nextLine();
char[] arr=вход.toCharArray();
Массивы.сортировка(ОБР);
Строка отсортирована=новая строка(arr);
Системы.из.код println(по убыванию);
}
}
приведенный выше код работает нормально, но он занимает 0 в первой позиции.Я хочу что-то вроде этого - > вход:936703 выход:303679 так что длина нет. остается то же самое.

Richard MacCutchan

Вам нужно будет написать свой собственный метод для обработки этого случая. В принципе, просто отсортируйте цифры и проверьте, является ли первый символ "0".

Рейтинг:
0

OriginalGriff

Если вы имеете в виду "я хочу ноль в позиции наименее значащей цифры", то попробуйте это сделать:

int digits = log10(num) + 2;
sort = 0;
int temp = num;
while (digits-- > 0)
    {
    int d = temp % 10;
    temp /= 10;
    sort = sort * 10 + d;
    }
Если вы этого не сделаете, то вам нужно будет объяснить гораздо более подробно!


Member 13954890

Он не сортирует цифры в порядке возрастания.Я хочу отсортировать все цифры "нет". в порядке возрастания.(кроме 0, который всегда должен занимать 2-ю позицию, так что длина нет. остается то же самое)
например, вход: № =692204 выход: 220469
вход: № =790402 выход: 200479

OriginalGriff

Это другое дело: самый простой способ сделать это-выделить массив, достаточно большой, чтобы вместить каждую цифру в отдельный элемент (int или даже просто байт), а затем отделить каждую цифру в отдельный элемент. (Вы можете получить необходимое вам количество элементов с помощью log10(yourNumber) + 1, именно это эффективно делает log10).

Затем вы можете отсортировать отдельные цифры в массиве и распечатать их оттуда.

Более сложный метод состоит в том, чтобы сделать сортировку "в целом", но, честно говоря, это заноза в заднице. Что касается количества цифр в целом, я бы не стал беспокоиться.

Member 13954890

Прости! Я тебя не понимаю.Не могли бы вы помочь мне с кодом? Заранее благодарю вас.

OriginalGriff

Нет, это твоя домашняя работа, а не моя!
В любом случае вы знаете все, что вам нужно для этого. Вы знаете, как извлечь каждую цифру отдельно, я знаю это. И вы знаете, как использовать массивы и как сортировать, не так ли?