My favorites
▼
|
Sign in
kpi-java-training-6
KPI Java Training fall 2013
Project Home
Wiki
Issues
Source
Export to GitHub
READ-ONLY: This project has been
archived
. For more information see
this post
.
Search
Search within:
All issues
Open issues
New issues
Issues to verify
for
Advanced search
Search tips
Subscriptions
Issue
24
attachment: Div.java.patch
(6.8 KB)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
--- trunk/Igor Bugun/Div.java
+++ trunk/Igor Bugun/Div.java
@@ -6,7 +6,7 @@
import java.util.Scanner;
public class Div {
- static int MinDiv(int den, int length, int...mas) { //ищем наименьшее число, которое содержится в делимом и которое больше или равно делимого
+ static int MinDividende(int den, int length, int...mas) { //ищем наименьшее число, которое содержится в делимом и которое больше или равно делимого
int mindiv=0;
if (mas[0]>=den) mindiv=mas[0];
@@ -17,6 +17,7 @@
}
return mindiv;
}
+
public static void PrintSym(int number, String symbol){ //добавляет отступы для красивого вывода
for (int i = 0; i <number ; i++) {
System.out.print(symbol);
@@ -24,63 +25,71 @@
}
}
-public static void main(String[] args)
-throws java.io.IOException {
+ public static int GetParamAndPrint(String msg){ //выводит на экран сообщение и принимает значения делимого и делителя
+ Scanner in = new Scanner(System.in);
+ System.out.println(msg);
+ int a=in.nextInt(); //ввод числа а
+ //in.close();
+ return a;
+ }
+
+ public static void DivideAndPrintResult(int Dividende, int Divisor){ //метод реализующий деление в столбик с выводом на экран
byte znak;
- Scanner in = new Scanner(System.in);
-
- System.out.println("Введите целочисленное значение делимого");
- int A=in.nextInt(); //ввод числа а
-
- System.out.println("Введите целочисленное значение делителя");
- int B=in.nextInt(); //ввод числа b
-
- int l = String.valueOf(A).length();
+ int LengthDividende = String.valueOf(Dividende).length();
- System.out.println(" "+A+" | "+B);
- PrintSym(l+2," "); System.out.print("|"); PrintSym(String.valueOf(A/B).length(),"-"); System.out.println();
- PrintSym(l+2," "); System.out.print("| "); System.out.println(A/B);
+ System.out.println(" "+Dividende+" | "+Divisor);
+ PrintSym(LengthDividende+2," "); System.out.print("|"); PrintSym(String.valueOf(Dividende/Divisor).length(),"-"); System.out.println();
+ PrintSym(LengthDividende+2," "); System.out.print("| "); System.out.println(Dividende/Divisor);
- if (((A<0)&(B>0)) | ((A<0)&(B<0))) { //проверка на знак
- B=-B;
- A=-A;
+ if (((Dividende<0)&(Divisor>0)) | ((Dividende<0)&(Divisor<0))) { //проверка на знак
+ Divisor=-Divisor;
+ Dividende=-Dividende;
}
- int am[] = new int[l];
+ int DividendeArray[] = new int[LengthDividende];
- for (int i=0, a=A;i<l;i++) { //разбиваем число на цифры и записываем в масив
- am[l-i-1] = a%10;
- a= (int) a/10;
+ for (int i=0, a=Dividende, BASE=10;i<LengthDividende;i++) { //разбиваем число на цифры и записываем в масив
+ DividendeArray[LengthDividende-i-1] = a%BASE;
+ a= (int) a/BASE;
}
- int z=MinDiv(B,l,am);
- int pos=String.valueOf(z).length()-1;//порядочный номер, на котором закончился перебор mindiv
+ int MinDividende=MinDividende(Divisor,LengthDividende,DividendeArray);
+ int Position=String.valueOf(MinDividende).length()-1;//порядочный номер, на котором закончился перебор mindiv
- int res[]=new int[l-pos];
- res[0] = (int) z/B;
+ int Result[]=new int[LengthDividende-Position];
+ Result[0] = (int) MinDividende/Divisor;
- System.out.print(-res[0]*B); System.out.println();
- PrintSym(l,"-"); System.out.println();
- int p=String.valueOf(z).length();
+ System.out.print(-Result[0]*Divisor); System.out.println();
+ PrintSym(LengthDividende,"-"); System.out.println();
+ int p=String.valueOf(MinDividende).length();
- for (int i1=1; i1<(l-pos);i1++) { //целочисленая часть
- int z1 = (z-res[i1-1]*B)*10+am[pos+i1];
- res[i1] = (int) z1/B;
- PrintSym(p+i1-1," "); System.out.println((z-res[i1-1]*B)+""+am[i1+pos]);
- PrintSym(p+i1-2," "); System.out.println(("-"+res[i1]*B));
- PrintSym(l,"-"); System.out.println();
+ for (int i1=1; i1<(LengthDividende-Position);i1++) { //целочисленая часть
+ int z1 = (MinDividende-Result[i1-1]*Divisor)*10+DividendeArray[Position+i1];
+ Result[i1] = (int) z1/Divisor;
+ PrintSym(p+i1-1," "); System.out.println((MinDividende-Result[i1-1]*Divisor)+""+DividendeArray[i1+Position]);
+ PrintSym(p+i1-2," "); System.out.println(("-"+Result[i1]*Divisor));
+ PrintSym(LengthDividende,"-"); System.out.println();
- z=z1;
+ MinDividende=z1;
}
int sum=0; //делаем число из масива цифр
- for (int i=0; i<(l-pos); i++) {
- sum = (int) (sum+res[i]*Math.pow(10, l-i-1-pos));
+ for (int i=0; i<(LengthDividende-Position); i++) {
+ sum = (int) (sum+Result[i]*Math.pow(10, LengthDividende-i-1-Position));
}
- System.out.println(" "+A%B);
- System.out.println(A+"|_"+B+" = частное "+sum);
- System.out.println("остаток от деления = "+A%B);
+ System.out.println(" "+Dividende%Divisor);
+ System.out.println(Dividende+"|_"+Divisor+" = частное "+sum);
+ System.out.println("остаток от деления = "+Dividende%Divisor);
+ }
+
+public static void main(String[] args)
+throws java.io.IOException {
+
+ int Dividende = GetParamAndPrint("Введите целочисленное значение делимого");
+ int Divisor = GetParamAndPrint("Введите целочисленное значение делителя");
+ DivideAndPrintResult(Dividende,Divisor);
+
}
}
Powered by
Google Project Hosting