|
Server : Apache/2.4.62 System : FreeBSD fbsdweb2.web.rcn.net 14.1-RELEASE FreeBSD 14.1-RELEASE releng/14.1-n267679-10e31f0946d8 GENERIC amd64 User : www ( 80) PHP Version : 8.3.8 Disable Function : NONE Directory : /domains/mandarintools/download/ |
Upload File : |
import java.lang.*;
import java.util.*;
class numbers {
public final static String minus = "�t";
public final static String[] digits = {"�s", "�@", "�G", "�T", "�|", "��", "��", "�C", "�K", "�E"};
public final static String[] beforeWan = {"�Q", "��", "�d"};
public final static String[] afterWan = {"", "�U", "��", "��"};
public final static String ALTTWO = "��";
public final static long TEN = 10;
public numbers() {
}
public static String EnglishToChineseNumber(long enumber) {
int[] powers = new int[30];
int power = 0;
int value = 0;
boolean negative = false, // is it a negative integer
inzero = false, // are we in a stretch or 1 or more zeros (only add one zero for the stretch)
canaddzero = false; // only add a zero if there's something non-zero on both sides of it
StringBuffer cnumber = new StringBuffer();
// If zero, just return zero
if (enumber == 0) {
return digits[0];
}
// Check if it's negative, set the negative flag and make it positive
if (enumber < 0) {
negative = true;
enumber = -enumber;
}
// Get the value of the coefficient for each power of ten
while (Math.pow(TEN, power) <= enumber) {
value = (int)((enumber % Math.pow(TEN, power+1))/Math.pow(TEN, power));
powers[power] = value;
// Subtract out the current power's coefficient and increase the power
enumber -= enumber % Math.pow(TEN, power+1);
power++;
}
// Take the decomposition of the number for above and generate the Chinese equivalent
for (int i = 0; i < power; i++) {
//System.out.println("10^" + i + ":\t" + powers[i]);
if ((i % 4) == 0) { // Reached the next four powers up level
if (powers[i] != 0) {
inzero = false;
canaddzero = true;
cnumber.insert(0, digits[powers[i]] + afterWan[i/4]);
} else {
// Check that something in the next three powers is non-zero before adding
if (((i+3 < power) && powers[i+3] != 0) ||
((i+2 < power) && powers[i+2] != 0) ||
((i+1 < power) && powers[i+1] != 0))
{
cnumber.insert(0, afterWan[i/4]);
}
}
} else { // Add one, tens, hundreds, or thousands place for each level
if (powers[i] != 0) {
inzero = false;
canaddzero = true;
if (power == 2 && i == 1 && powers[i] == 1) { // No �@ with 10 through 19
cnumber.insert(0, beforeWan[(i%4)-1]);
//} else if ((i%4 = 3) && powers[i] == 2) { // when to use liang3 vs. er4
//cnumber.insert(0, ALTTWO + beforeWan[(i%4)-1]);
} else {
cnumber.insert(0, digits[powers[i]] + beforeWan[(i%4)-1]);
}
} else {
if (canaddzero == true && inzero == false) { // Only insert one �s for all consecutive zeroes
inzero = true;
cnumber.insert(0, digits[powers[i]]);
}
}
}
}
// Add the negative character
if (negative == true) {
cnumber.insert(0, minus);
}
return cnumber.toString();
}
public static void main(String[] argc) {
long enumber;
if (argc.length == 0) {
enumber = -10309300932L;
} else {
enumber = Integer.parseInt(argc[0]);
}
System.out.println(EnglishToChineseNumber(enumber));
}
}