Få fram ett symmetrisk tal
Hejsan!
Jag vill först börja med att berätta att jag är extremt ny på att programmera och har precis lärt mig grunder i Java.
Så uppskattar om det går att vara övertydlig med vad ni försöker förklara.
Mitt problem är att jag vill att java / mitt program ska hitta ett symmetrisk tal.
det jag får fram när jag kör mitt program är.
-------------------------------------------------------------------------------
1 : 87 + 78 = 165
2 : 165 + 561 = 726
3 : 726 + 627 = 1353
4 : 1353 + 3531 = 4884 <---- talet som är symmetrisk och det jag vill att programmet ska stanna loopen vid.
5 : 4884 + 4884 = 9768
6 : 9768 + 8679 = 18447
7 : 18447 + 74481 = 92928
8 : 92928 + 82929 = 175857
9 : 758571 + 758571 = 1517142
10 : 1517142 + 2417151 = 3934293
11 : 3934293 + 3924393 = 7858686
12 : 7858686 + 6868587 = 14727273
13 : 37272741 + 37272741 = 74545482
74545482 är det symmetriska numret.
Det tog 13 steg för att hitta svaret.
-------------------------------------------------------------------
Kod main programmet:
import java.util.Scanner;
public class test1 {
public static void main(String[] args) {
Scanner userInput = new Scanner(System.in);
int counter = 1;
int[] num = new int[4];
boolean willContinue = true;
int svar = 0;
numbers numbers = new numbers(num[0], num[1], svar);
num[1] = 87;
num[0] = numbers.reverse(num[1]);
svar = num[0] + num[1];
System.out.print(counter + " : " + num[1] + " + " + num[0] + " = " + svar);
while (willContinue) {
for (int i = 0; i < num.length; i++) {
for (int g = 1; g < num.length; g++) {
counter++;
num[i] = svar;
num[g] = numbers.reverse(num[i]);
svar = num[i] + num[g];
System.out.print("\n" + counter + " : " + num[i] + " + " + num[g] + " = " + svar);
if (numbers.checkSymetric(svar)) {
willContinue = false;
break;
}
}
}
System.out.print("\n" + svar + "är det symetriska numret. "
+ "\nDet tog " + counter + " steg för att hitta svaret.");
}
}
}
kod subklass:
public class numbers {
int num1;
int num2;
int svar;
public numbers(int Num1, int Num2, int Svar) {
this.num1=Num1;
this.num2=Num2;
this.svar=Svar;
}
public boolean checkSymetric(long number) {
if (number == 0) return true;
else if (number < 0) return false;
long DEG_10 = (long)(Math.pow(10, (int)Math.log10(number)));
while (number > 0) {
long dStart = number / DEG_10;
long dEnd = number % 10;
if (dStart != dEnd) return false;
number = (number - dStart * DEG_10 - dEnd) / 10;
DEG_10 /= 100;
}
return true;
}
public int reverse(int input) {
long reversedNum = 0;
long input_long = input;
while (input_long != 0) {
reversedNum = reversedNum * 10 + input_long % 10;
input_long = input_long / 10;
}
if (reversedNum > Integer.MAX_VALUE || reversedNum < Integer.MIN_VALUE) {
}
return (int)reversedNum;
}
}
Har suttit i två dagar nu med detta och försökt att lösa det, men lyckas inte knäcka det.
Och börjar tveka på om det ens går att göra såhär i java?
Tack!