导入java.math.*;/**一个类,用于获取任意精度整数的希伯来语名称。*
这个类应该支持所有可能的BigInteger,只受名称本身的长度限制。*
注意,对于大于等于10^9的数字,该程序使用短刻度,并使用单词“十亿”表示10^9,而不是“毫”**/公共类HebrewNumberNames{//词汇private static final String[]feminineVocabular={“”,“\u05d0\u05d\u05ea”,“\f05e9\u05ea\u05d9\u005dd”,”\f05e9 \u05dc\u05d 5\u05e9“,”\f05 d0\u 05e8\u 05d1\u05e2“,”\u 05d 7\u 05de\u 05e 9“,05e9\u05de\u05d5\u05e0\u05d“,”\u05ea\u05e 9\u05 e2“,”\ u05e2\u05 e9\u 05e8“,”,“\u05e9\u05ea\u05d9\u07d\u05de2\u05e9 \u05e 8\u05d 4”,“\u 05e9\ u05dc\u 05d5\u 05e 9\u 05e\u 05e9 \ u 05e8\u 05d 4 05e9\u05e8\u05d4“,”\u05e 9\u05 e9\u 05e9\ u 05e9-u 05e9 \u 05e 8\u 05d4,“\u05ea\u05e9\u05e2\u05e2\u05 e9\u 05e8\u 05d4”};private static final String[]masculieVocabular={“”,“\u05d0\u05d\u05d7\u05d 3”,“\ u05e9\u05e0\u 05d9\u 05dd”,“\u05e9\u05d1\u05e2\u05d4”,“\u 05e9\ u05de\u 05d5\u 05e 0\u 05d 4”,“\u05d0\u05d\u05d7\u05d 3\u05e2\u05e9\u05e 8”,“\u 05e9\ u05e0\u 05d9\u 05dd\u 05e 2\u 05e9 \u 05e\u 05e 8“\u05e8”、“\u05 d7\u05 de \u05 e9\u05 d 4\u05 e 2\u05 e 9\u05e 8”、,“\u05e9\u05de\u05d5\u05e 0\u05d 4\u05e\u05e2\u05e 9\u05 e8”,“\u05 ea\u05 E9\u5 e2\u 05d4\u05 e 2\u 05 e9\u 05e8”};private static final String[]intermediateVocabulary={“\u05e2\u05e9\u05e 8\u05d9\u05 dd”,“\u05 e9\u 05d5\u 05e9\ u 05dd”05dd“,”\u05e9\u05d1\u05e2\u05d9\u05 dd“,“\u05de\u05d0\u05d”,“\u 05de\u 05d0\ u05ea\u 05d 9\u 05dd”u05d5\u05ea“,”\u05e9\u05e\u05e9 \u05de\u05d0\u05d\u05de5\u05“,“\u05ea\u05e9\u05e2\u05de\u05d0\u05d\u05ea”};private static final String[]largeVocabular={“”,“\u05d0\u05dc\u05e3”,“\ u05de\u05d\u05d9\u05d 5\u05df”,“\f05d1\u05d 9\u05 d5\u05 df”u05d9\u05dc\u05d9-u05d5\u05df“,”\u05e7\u05d\u05d9 \u05e\u05e0\u05b8\u05d 9\u05 dc\u05 d9\u 05d 5\u05 df“,“\u05e1\u05e7\u05e\u05d8\u05d9\u05dc\u05d 9\u05 d5\u05 df”,0\u05d9\u05dc\u05d\u05d9-u05d5\u05df“};private static final String[]largeVocabulary0={“”,“\u05d0\u05e0”,“\ u05d3\u05d\u05d5\u05d0\u05 d5”,“\f05d8\u05 e8\u05d 9”,“\\u05e7\u05 d\u05 d8\u 05d5\ u05 d5\u 05e8”,“\u05e1\u05e4\u05d8\u05e 0”,“\u 05d0\u 05d 5\u 05e7\u 05d\u 05d 5”,“\ u 05e0\u 05 d5\u 05 d\u 05 de”};private static final String[]largeVocabulary1={“”,“\u05d3\u05e1”,“\ u05d5\u05d 9\u05d\u05e0”0\u05e7\u05d5\u05d2\u05d9\u05e“,”\u05e1\u05e1\u05 e1\u 05d2\u05 d9\u 05e0“,”,“\ u05d0\u05d5\u05e7\u05d_8\u05d 5\u05 d2\u05 d9\u05 e0”,“\u 05e0\u 05d5\ u 05e0 \u 05d 2\u 05d9\u 05e 0”};private static final String[]largeVocabulary2={“”,“\u05e1\u05e0”,“\ u05d3\u05d5\u05d\u05d5 \u05e\u05e 0”,”“\ u05 d8\u05e 8\u05 d9\u05 e1\u 05e0“,”“\u 05e7\u05d 5\u 05d 3\u 05e 8\ u 05d9\u 05d2\u 05e 0“9\u05e0\u05d2\u05e0”、“\u05e1\u05e\u05e”、“\ u05e1\u05 e4\u05d 8\u05 d9\u05 e0\u 05d2_u05 e0”,“\ u05 d0\u 05 e7\u 05d 8\ u 05d 9\u 05e0\ u 05d2\u 05e 0”,“\u05e0\u05d5\u05e_u05d2\u05e0”};//如果v为true,则返回字母Vav(u05d5),否则返回空字符串私有静态字符串condVav(boolean v){返回v?“\u05d5”:“”;}//1到999之间的数字的名称private static String shortname(int n,String[]smallVocabulary,boolean fin,boolean-vav){n=n%1000;if(!fin){如果(n==1){return“”;}else if(n==2){return condVav(vav)+smallVocabular[2].substring(0,smallVogalar[2].length()-1);}else{return shortname(n,smallVocabulary,!fin,vav);}}如果(n==0){return“”;}if(n<20){返回condVav(vav)+小词汇[n];}如果(n<100){if(n%10==0){返回condVav(vav)+中间词汇[((n/10)%10)-2];}return intermediateVocabulary[((n/10)%10)-2]+“\u05d5”+smallVocabullary[n%10];}if(n%100==0){返回condVav(vav)+中间词汇[(n/100)+7];}return intermediate词汇[(n/100)+7]+“”+短名称(n%100,smallVottery,true,true);}//1000^n的适当短标度单词private static String thousandsPower(long n)专用静态千分功率{if(n<0){抛出新的算术异常(“不支持负幂”);}if(n<=10){return largeVocabular[(int)n];}n--;字符串pow=“”;字符串millias=“”;int后缀=(int)((n/10)%10);而(n>0){int x=(int)(n%1000);n/=1000;pow=(x==0?“:毫微秒)+pow;pow=largeVocabulary1[(x/10)%10]+pow;如果(!(n==0&&x==1)){pow=largeVocabulary0[x%10]+pow;}pow=largeVocabulary2[x/100]+pow;millias+=“\u05de\u05d9\u05dc\u05d 9\u05 d0\u05 d 4”;}return pow+(后缀==1?“\u05d9\u05dc\u05d\u05d9-u05d5\u05df”:;}/**返回给定BigInteger n的希伯来语短刻度阳性名称*/公共静态字符串masculineName(BigInteger n){return masculineName(n,0);}/**返回BigInteger n*1000^off的希伯来文短刻度阳性名称。*
这种方法允许在不存储尾随零的情况下命名大数字。*/public static String masculineName(BigInteger n,long off){返回名称(n,off,false);}/**返回给定BigInteger n的希伯来语短小数位数名称*/公共静态字符串名称(BigInteger n){返回名称(n,0);}/**返回BigInteger n*1000^off的希伯来文短刻度名称。*
此方法允许命名较大的数字,而不存储尾随的零。*/公共静态字符串名称(BigInteger n,long off){返回名称(n,off,true);}//考虑性别和偏移的希伯来语数字名称私有静态字符串名称(BigInteger n,long off,boolean femality){if(off<0){抛出新的算术异常(“负偏移量”);}如果(n.signum()==0){return“\u05d0\u05e4\u05e”;}if(n.signum()==-1){返回名称(n.negate(),off,femality)+“\u05e9\u05dc\u05d9\u05 dc\u05 d9”+(femality?“\u05 ea”:“”);}int部分=0;字符串s=“”;而(n.signum()>0){part=n.remainment(BigInteger.valueOf(1000)).intValue();n=n.divide(BigInteger.valueOf(1000));if(关==1&&部分>=2&&部分<=10){如果(部分==2){s=“\u05d0\u05dc\u05e4\u05d\u05dd”+s;}else如果(part==8){s=“\u05e9\u05de\u05d5\u05e0\u05ea\u05d0\u005dc\u05e\u05e4\u05d\u05dd”+s;}else{s=女性词汇[part]+“\u05ea\u05d0\u05dc\u05e4\u05d9\u05dd”+s;}}else if(off>0&&part>0){s=(part>1?“:”“)+千功率(off)+s;}if(!(off==1&&part>=2&&part<=10)){s=缩写(part,femilific&&off==0?femilinineVocabulace:男性词汇,off==0,n.signum()!=0)+s;}如果(n.signum()>0&&part>0){s=“”+s;}关闭++;}返回s;}公共静态void main(String[]args){for(int c=0;c<=10000;c++){字符串nom=名称(BigInteger.valueOf(c)).replace(“”,“”);System.out.println(c+“”+标称长度());}}}