Hey, написах този код и не мога да разбера защо не мога да parse-na този string n към int :
import java.util.Scanner;
public class Crooked_digits {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String n = input.nextLine();
n= n.replace("-", "");
n = n.replace(".", "");
int sum = 0;
int j = 0;
int f = 0;
int sum2 = 0; int x = Integer.parseInt(n);
while(x > 0)
{
j = x % 10;
sum = sum + j;
x = x / 10;
}
if (sum < 10){
System.out.println(sum);
}
else
while (sum > 9){
f = sum % 10;
sum2 = sum2 + f;
sum = sum/ 10;
System.out.println(sum2);
} }}
Отново файл-на кода , този път с 60/100 точки. Погледнах editorial-a и мисля, че теоретично правя (очевидно не обаче)
import java.util.Scanner;
public class Crooked_digits {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String n = input.nextLine();
n = n.replace("-", "");
n = n.replace(".", "");
int sum = 0;
int sum2 = 0;
int sum3 = 0;
int y = 0;
int i;
for (i = 0; i < n.length(); i++) {
char x = n.charAt(i);
sum = sum + Integer.parseInt(String.valueOf(x));
}
if (sum < 10) {
System.out.println(sum);
} else if (sum > 9) {
while (sum > 9) {
y = sum % 10;
sum2 = sum2 + y;
sum = sum / 10;
}
if (sum2 + sum < 10) {
System.out.println(sum2 + sum);
} else if (sum2 + sum > 10 ) {
sum3 = sum2 % 10 + sum2 / 10;
System.out.println(sum3);
}
}
}
Опитвам се да реша задачата на JS, но при тестване в Judge, ми излизат само 4/10 верни. При примерните тестове от задачата всичко е наред. Това което не мога да разбере е, че при вложните цикли, ако ми се получи 10, спира цикъла, а не го завърта още веднъж. Някакви идеи? Ето го и кода: Click
Съветвам те да имаш само едно място на което принтираш output.
Веднага след фор-цикъла имаш команда print(output), още преди проверка _if ( output > 9) _ , което при резултат по голям от 9 ще принтира и след това ще влезне в проверката.
Помисли за втората част, какво ще стане ако влезнеш например output = 999?
Променливата newN реално ще добави три пъти 9, output вече ще е равен на 0 и while приключва, след което output = newN(9+9+9 = 27) и принтираме 27.
Приложено ти изпращам два варианта за решение на задачата, моя съвет е да разгледаш второто решение:
Здравейте,
Опитвах се по всякакъв начин да наместя BigInteger, но в моето решение n трябва да е int заради while. Ще съм благодарна на съвет и насока Ето го и сегашният ми код.
Ако пуснеш дебъг на програмата си, ще забележиш как при парсването на дълго число от String към double се добавя знак за експоненциален запис “Е” в самото число, от което после идват всички проблеми.
Конкретно с твоя input от 1020340567.89, се получава следния резултат:
Решението тук е да приемеш числото като String, след което да направиш нужните операции.
Edit: сетих се за по-елегантно решение. Преправи това:
Преправих първата половина на кода, като втората можеш да я ползваш както си е:
Scanner user_input = new Scanner(System.in);
String input = user_input.nextLine();
long sum = 0;
long number = 0;
for (int i = 0; i < input.length(); i++) {
if (Character.isDigit(input.charAt(i))) {
number += input.charAt(i) - '0';
}
}
if (number == 0) {
System.out.println("0");
}
while (number > 0) {
..... }
Обърни внимание на методите Character.isDigit и charAt, които ще са ти много полезни за в бъдеще.
При number += input.charAt(i) - '0'; вадим изрично нулата, защото при директно присвояване на char към int, char-a придава своята ASCII стойност, и трябва изрично да извадим тази нула под формата на char (или да извадим int-овата стойност на нула в ASCII, която е 48).
Ако искаме да избегнем горните калкулации, можем да ползваме метода getNumericValue.:
number += Character.getNumericValue(input.charAt(i));
Което ни връща директно числовата (int) стойност на въпросния char и така няма нужда да мислим за ASCII.
Операторите += са съкращение на number = number + …
Миналият подход иначе не проработи, защото не обърнах внимание, че при написване на дълго число, експоненциалният запис “Е” замества цели цифри, и така докато стигнем до нашата проверка, вече имаме изкривен/съкратен запис на първоначално зададените данни.