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
10
attachment: Test1Division.java
(7.4 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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
package test1division;
import java.io.*;
import java.util.*;
public class Test1Division {
public static void main(String[] args) throws IOException{
// Чтение из командной строки
BufferedReader input = new BufferedReader( new InputStreamReader(System.in));
System.out.println("Enter the dividend:");
String n;
int p = 0;
n = input.readLine();
p = Integer.parseInt(String.valueOf(n));
if (p == 0){
System.out.println("Error can not divide zero!!!");
System.exit(0);
}
//System.out.println("Делимое:\t" + p);
// Разбиение строки в массив символов
char[] str0;
char[] str1;
str1 = n.toCharArray();
if (p<0){
str0 = n.toCharArray();
char[] str3 = new char[str0.length-1];
for( int i = 1, j = 0; i < str0.length && j < str0.length-1; i++, j++){
str3[j] = str0[i];
}
str1 = str3;
}
// "Перевод" массива символов в массив целых чисел
// это в далнейшем нам понадобится для деления
int[] numer = new int[str1.length];
for( int i = 0; i <str1.length; i++){
numer[i]=Integer.parseInt(String.valueOf(str1[i]));
}
String s;
int y = 0;
System.out.println("Enter the divisor:");
s = input.readLine();
y = Integer.parseInt(String.valueOf(s));
if (y == 0){
System.out.println("Error!!! You can not divide by zero!!!");
System.exit(0);
}
//System.out.println("Делитель:\t" + y);
char[] str2;
char[] str4;
str2 = s.toCharArray();
if (y<0){
str4 = s.toCharArray();
char[] str5 = new char[str4.length-1];
for( int i = 1, j = 0; i < str4.length && j < str4.length-1; i++, j++){
str5[j] = str4[i];
}
str2 = str5;
}
int[] numer1 = new int[str2.length];
for( int i = 0; i<str2.length; i++){
numer1[i]=Integer.parseInt(String.valueOf(str2[i]));
}
// Определение знаков результата и остатка
int minus = 1;
char minusp = ' ';
char minuspend = ' ';
char minusy = '-';
if (p<0 && y<0){
minusp = '-';
minuspend = ' ';
minusy = '+';
minus = 1;
} else { if(p<0 || y<0){
if ( p<0 ){
minusp = '-';
minusy = '+';
minus = -1;
}
}
}
System.out.println("minus" + minus);
// Восстановление делителя
double l = 0;
for (int i = 0; i < numer1.length; i++){
l += (double)numer1[i]*Math.pow(10d,(double)(numer1.length-1 - i));
}
// Восстановление делимого но только старших разрядов
// таким образом делитель и делимое имеют одну "длинну"
int count = 0; // Счетчик количества разрядов в "частичном" делимом
double m1 = 0;
for (int i = 0; i < numer1.length; i++){
m1 += (double)numer[i]*Math.pow(10d,(double)(numer1.length-1 - i));
count++;
}
// Набор вспомогательных переменных
int h = 0;
int x = 0;
int c;
int k;
int m2 = (int) m1; // Превод с дабл в инт частичного делимого
int l1 = (int) l; // и делителя
int count1 = 0; // Считает сколько раз добавлялись разряды
int count2 = 0; // Счетчик индекса для добавления элементов массива результата
int count3 = -1; // Считает сколько раз "подряд" добавлялись разряды чтобы добавлять нули в результат
int count4 = 0; // Счетчик для элементов массива делимого для "выделения" разрядов из массива
// Операция необходимая для определения размера контейнера ArrayList
Integer d;
d = m2 / l1;
String str3;
str3 = d.toString();
char[] length;
length = str3.toCharArray();
// Создание контейнера для элементов результата
List<Integer> result= new ArrayList<Integer>(length.length);
count4 = count;
// В цикле реализовано само деление состоящее с операций сравнения и вычитания
System.out.println("Devision:");
System.out.println(" " + p + " | " + y);
for ( int j = count - 1; true; j++){
count1++;
//System.out.println("first" + m2);
if ( m2 >= l1) {
x = m2 / l1;
h = x;
result.add(count2, h);
count2++;
count3 = -1;
c = l1 * x;
System.out.println(" " + minusp + m2);
System.out.println(" " + minusy + (l1 * x));
System.out.println("----------");
k = m2 - c;
m2 = k;
} else { if (count1 == 1){ // добавление первого разряда если делитель больше "частичного" делимого
m2 = m2 * 10 + numer[j+1];
count4++;
} else {
if(count4 == numer.length ){ // Выход из цикла если все "разряды" делителя были "использованы"
System.out.println(" " + minuspend + m2);
break;
}
m2 = m2 * 10 + numer[count4]; // Добавление дополнительных разрядов
count4++;
count3++;
if (count3 >= 1){ // добавление нулей в результат если производится перенос нескольких разрядов подряд
result.add(count2, 0);
count2++;
}
}
}
}
// Вывод результата
double t = 0;
for (int i = 0; i < result.size(); i++){
t += (double)result.get(i)*Math.pow(10d,(double)(result.size() - 1 - i));
}
int u;
u = (int) t;
System.out.println("Result:" + (u*minus) + "(" + m2 + ")");
}
}
Powered by
Google Project Hosting