Сосчитать сумму цифр, при этом умножая каждую цифру на её порядковый номер (позицию) в числе, считая слева, начиная с единицы. Например 1567 - получается 1*1+5*2+6*3+7*4=57.
В этом коде вроде бы считает, но почему то выдает некорректный результат. Не пойму в чем проблема
public static void main(String[]args){
int a = 56;
int sum = 0;
String s = a+"";
for (int j=0;j<s.length(); j++){
sum+=(j+1)*s.charAt(j);
}
System.out.println(sum);
}
Так у вас ничего работать не будет. Если поставить цель сделать этот код рабочим, то пишите так:
int a = 56;
int sum = 0;
String s = String.valueOf(a);
for (int j = 0; j < s.length(); j++) {
sum +=(j+1)*Integer.valueOf(s.substring(j, j+1));
}
System.out.println(sum);
Главная причина нерабочего кода в том, что метод charAt возвращает вам char, который по сути является числовым представлением символа. Поэтому расчет происходит именно исходя из этого числового представления, а не из фактического числа, которое вы видите в строке.
Но это плохой код. Преобразовывать инт в стринг и наоборот нецелесообразно. Вы тратите слишком много ресурсов: это медленные методы плюс нееоправданно большое количество объектов , разумеется , занимают память.
Для таких подсчетов просто делите число на 10, каждый раз получая цифру. Узнав все цифры, выполняйте с ними необходимые вычисления.
Метод String.charAt()
возвращает char
.
В java
, char
это числовое представление символа. Поэтому следующий код вполне себе работоспособный.
char a = 'a';
char b = 'b';
int i = a + b;
System.out.println(i);
Ошибок компиляции он не выдаст.
В данном случае:
a = 97
b = 98
В вашем случае:
'5' = 53
'6' = 54
Поскольку задачка учебная, дам только подсказку. Используйте оператор деления (/) и оператор получения остатка (%).
Как уже было сказано в других ответах - метода charAt
возвращает тип char
, в котором хранится код символа. В случае, если вы хотите использовать свою реализацию, но при этом, чтобы она работала правильно, то можно из каждого кода символа-цифры вычесть код символа 0
- получится правильное значение цифры. Код тогда будет следующим:
int a = 56;
int sum = 0;
String s = a + "";
for (int j = 0; j < s.length(); j++) {
sum += (j + 1) * (s.charAt(j) - '0');
}
System.out.println(sum);
Но всё же, лучше решать такие задачи арифметически, а не через строки.
int num = 1567;
int len = 0;
ArrayList<Integer> digits = new ArrayList<Integer>();
while (num > 0) {
digits.add(num % 10);
num /= 10;
len++;
}
int sum = 0;
for (Integer digit : digits) {
sum += digit * len;
len--;
}
System.out.println(sum);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Доброго времени суток! Помогите пожалуйста реализовать поиск по спискуДве недели мучаюсь!
Хочу научится конвертировать mp4 в mp3 и тому подобное на JavaПодскажите в какую сторону начинать копать
В Java совсем новичок, но есть задача переписать ftp-клиент с C# на JavaПодскажите пожалуйста (желательно по пунктам), как подключить данную библиотеку?...