2015-12-05 1 views
1

Учитывая, что строка введена, преобразуйте ее в число, которое она представляет. Вы можете предположить, что строка состоит только из числовых цифр. Он не будет состоять из отрицательных чисел. Не используйте Integer.parseInt для решения этой проблемы.Результат преобразования строки в число не соответствует ожидаемому

MyApproach

я преобразовал строку в массив символов и хранится оригинальный номер, но я не могу превратить его в один номер Я попытался преобразования отдельных элементов, но цифры могут быть любой длины. Таким образом, было трудно следовать этому подходу.

Подсказка: У меня есть намек, что цифры могут быть добавлены с помощью значений места

Для, например, если номер 2300.I хранится каждый номер в виде arrays.Then должно быть 2 * 1000 + 3 * 100 + 0 * 10 + 0 = 2300

Но я не могу преобразовать его в код.

Может ли кто-нибудь вести меня, как это сделать?

Примечание. Я не могу использовать какие-либо встроенные функции.

public int toNumber(String str) 
{ 
    char ch1[]=str.toCharArray(); 
    int c[]=new int[ch1.length]; 
    int k=0; 
    for(int i=0;i<c.length;i++) 
    { 
    if(ch1[i]==48) 
    { 
     c[k++]=0; 
    } 
    else if(ch1[i]==49) 
    { 
     c[k++]=1; 
    } 
    else if(ch1[i]==50) 
    { 
     c[k++]=2; 
    } 
    else if(ch1[i]==51) 
    { 
     c[k++]=3; 
    } 
    else if(ch1[i]==52) 
    { 
     c[k++]=4; 
    } 
    else if(ch1[i]==53) 
    { 
     c[k++]=5; 
    } 
    else if(ch1[i]==54) 
    { 
     c[k++]=6; 
    } 
    else if(ch1[i]==55) 
    { 
     c[k++]=7; 
    } 
    else if(ch1[i]==56) 
    { 
     c[k++]=8; 
    } 
    else if(ch1[i]==57) 
    { 
     c[k++]=9; 
    } 

    } 
} 
+0

Даже не Math.pow ?, петли в обратном направлении использовать вар, который вы множественные на 10 (к несколько nr с) и суммировать их. –

+1

Рассмотрим инструкцию switch, если ... если читать ... –

+2

'if (ch1 [i] == 48)' -> [избегать магических чисел] (http : //stackoverflow.com/questions/47882/what-is-a-magic-number-and-why-is-it-bad). 'if (ch1 [i] == '1')' намного понятнее. – Pshemo

ответ

4

Вам не нужно выполнять полномочия или отслеживать свой множитель. Просто умножьте свой общий итог на 10 при каждом добавлении новой цифры. И использовать c - '0' превратить персонаж в номер:

int n = 0; 
for (int i = 0; i < str.length(); i++) { 
    n = n * 10 + str.charAt(i) - '0'; 
} 

Так, например, для 1234 он идет

0 * 10 + 1 = 1 
1 * 10 + 2 = 12 
12 * 10 + 3 = 123 
123 * 10 + 4 = 1234 
+0

Короткий вариант решения только для решения, за исключением того, что я пытался не просто передать домашний ответ на OP. Ну что ж. ;-) – Andreas

+0

@ Андреас не прочитал ваш ответ перед публикацией, иначе я, вероятно, не стал бы беспокоиться. Было не так много усилий, чтобы передать ОП домашнее задание, так как другие решения были излишне сложными. «Решение только» немного жестко, но я объяснил (если коротко), что он делает. Так или иначе, вы получили мой голос :) – CupawnTae

-1

Вы можете сделать

int no = 0; 
for(int i = 0; i < c.length; i++){ 
    no += c[i] * Math.pow(10, c.length - 1 - i); 
} 
+0

@anandmishra Зацикливание другого пути по-прежнему приведет к неправильному результату. – Andreas

1

Если цикл через массив символов вы имеете и принять последнее значение, поставить его через если заявление и добавить в Ан число целое независимо, что число является (используйте заявления 10 if). Затем переходите ко второму к последнему значению и делайте то же самое только в этот раз, умножая полученные числа на 10, прежде чем добавлять их к общему числу. Повторите это, используя значение 1 * 10^(значение от конца), умноженное на число, полученное из операторов if.

1

Ну, что приходит на ум при виде этой проблемы заключается в умножении числа вы получаете с текущим кодом с места, которое они имеют в charArray:

int desiredNumber = 0; 
for(int k=1; k<=c.length; k++) { 
    desiredNumber += c[k] * (Math.pow(10, c.length - k)); 
} 

Если вы не можете использовать Math.pow(), то просто напишите один с помощью цикла.

Привет Raven

3

Цифра символов ('0' - '9') может быть преобразовано в целое значение (0 - 9) с помощью:

ch - '0' 

Это потому, что цифра символов все подряд в ASCII/Unicode.

Что касается расчета полного номера, для ввода 2300, вы не хотите:

2 * 1000 + 3 * 100 + 0 * 10 + 0 

Вместо этого, вы хотите более поэтапный подход с использованием цикла:

r = 0 
r = r * 10 + 2 (2) 
r = r * 10 + 3 (23) 
r = r * 10 + 0 (230) 
r = r * 10 + 0 (2300) 

Это намного лучше, чем пытаться вычислить 1000 (Math.pow(10,3)), что потребует ваша формула.

Этого должно быть достаточно информации для вас, чтобы закодировать его. Если нет, создайте новый вопрос.

Смежные вопросы