java10001000
Ⅰ 急求!用java算1到1000阶乘的末尾有几个零
可以认为,有多少组2、5,结尾就有多少个0 */
/* 操作方法:操作1到1000中所有的数,看每个数能被2和5整除几次,并分别统计,假设被2整除8次,被5整除12次,那我们可以认为有8组(2,5),即8个0*/
//被2整除的次数之和
int count2 = 0;
//被5整除的次数之和
int count5 = 0;
//遍历所有的数
for (int number = 1; number <= 1000; number ++) {
int dynmicNumber = number;//该数的一个复制,用于不数的整除用
while (dynmicNumber % 2 == 0) { //统计该数能被2整除多少次,但是并不单独统计,而是统计到全局
count2++;
dynmicNumber /= 2;
}
while (dynmicNumber % 5 == 0) { //统计该数能被2整除多少次,但是并不单独统计,而是统计到全局
count5++;
dynmicNumber /= 5;
}
}
System.out.println("结尾0的个数为:" + Math.min
Ⅱ 怎么修改java游戏屏幕大小
所谓暴力移植游戏,就是用WINHEX等16进制修改工具直接编辑游戏的CLASS,要运用这种方法,首先要安装 JAVA反编译工具(最好找个国产的,用外国的反编译出来中文是不能正常显示的,所以我开始时都是要猜位置,现在习惯了所以还是用DJ),16进制编辑工具,中文模拟器,JavaMagic(主要是懒于自己修改键位),计算器。而移植的游戏主要是针对S60的游戏,而且解压出来有图片的游戏移植更加容易。 工具齐了,就开始移植,先用JavaMagic修改好键位,然后用模拟器试运行,可以了然后解压,反编译CLASS文件,然后正式开始移植了。 首先CLASS反编译出来的文件直接用CTRL+F搜索draw,其中图片显示的函数是drawImage,文字显示的函数是drawString,搜索draw是确定CLASS文件中是否有需要改的地方,那么找到文件了,比如a.class反编译的a.jad中搜索出drawImage或drawString,就是说里面有决定JAVA文字或图片的函数,其格式通常是: drawImage(a, 10, 20, 20) drawString(b, 100, 208, 20)或drawString("文字", 10, 20, 20) (还有其他的一些DRAWXXXX函数不一一细说了,都是差不多的,主要是我不甚记得其意义) 10,20代表图片文字开始显示的位置,左上角那点表示0,0前面那个是横 后面那个是纵 其中a和b是被定义图片文字的代码在上面你基本上可以搜索到 a = xx("xxx.png")b = xxx("文字") 其中不是用中文软件反编译的文字是不能正常显示的。 地方找到了,就要开始修改,用WINHEX等直接打开a.class, 搜索100A(16进制的10)1014(16进制的20)(需要用计算器将10进制改为16进制),搜索前最好确定上文中有多少个10,20这样的组合以确定位置,搜索到了就直接修改,比如改为0,0: 100A1014 —— 10001000,这样就达到修改的目的,而a所代表的图片的起始位置就到了0,0,同样文字也是这样修改。 所以通常是先用模拟器确定需要修改的图片显示位置,再改到适合位置,不断调试。 还有要说明的是数值显示的方式 通常是 0-5 03-08(通常有一些比较小的数字是这样显示的) 0-127 1000-107F 128-208 110080-1100D0 比如132,你就要搜索110084 方法是这样了,那么下面就谈一下技巧 技巧一: 因为S60的游戏是176*208的,而移植的目的是改为132*176 而很多图片是从中间显示的,比如(88,XX),只要改为(66,XX)就可以显示到中间了,即将1058改为1042,当然改的时候要搜索清楚才改。 还有是有一些可以直接改176,208,成为132,176就可以的,即是1100B01100D0改为1100841100B0 技巧二: 有一些游戏其位置是用字母显示的,比如a+k,b+y等,见到这种情况的话就先看前面有没有写a = xx,b=xx,x=xx,y=xx,应为有一些是自动适应高度长度的,比如a=getlength那就不用改,但是要是没有的话就要改成适当的数字 技巧三: 有一些是集合数字和字母的,字母就看有没有定义个别的数值,比如A=176等,而数字就要改到适当位置。 技巧四: 有一些位置直接修改图片而不用修改文件可以达到移植的目的
Ⅲ java求1000的阶乘
int[] res = new int[3000];
final int limit = 1000;
res[1] = 1; //0405
int max_now = 1;
for(int step = 1; step <= limit;step++)
{
int temp = 0;
int now = max_now; //40320
int zero;
for(zero = 1; zero <=now;zero++)
{
if(res[zero] != 0)
break;
}
for(int carry = zero-1;carry <= now;carry++)
{
res[carry] *= step;
res[carry] += temp;
temp = 0;
if(res[carry] >= 10)
{
int carry_temp = carry;
temp = res[carry];
if(carry_temp <= max_now)
{
res[carry_temp] = temp%10;
temp/=10;
carry_temp++;
}
if(carry_temp > max_now)
{
while(temp >= 10)
{
res[carry_temp] = temp%10;
temp /= 10;
carry_temp++;
}
res[carry_temp] = temp;
temp = 0;
max_now = carry_temp;
}
}
}
}
System.out.println(max_now);
for(int j = max_now; j > 0; j--)
{
System.out.print(res[j]);
}
Ⅳ java 数据类型基础问题 高分
inta=0x7fffffff;
floatb=a;
System.out.println("a="+a);
System.out.println("b="+b);
System.out.println(Integer.toBinaryString(a));
intc=Float.floatToIntBits(b);
System.out.println(Integer.toBinaryString(c));
结果:
这俩个二进制数都是不带符号位的
我们给他们补上符号位然后分段看
0 1111 1111 1111 1111 1111 1111 1111 111
0 10011110 0000 0000 0000 0000 0000 000
很明显int的尾数位比float的尾数位要多,而被丢弃的尾数为被“四舍五入”的进位了,这里或许应该叫做0舍1入比较恰当而且,依次进位后所有的尾数都成了0而,最高的尾数为则将进位进到了指数位,楼主尝试输出一下double型就看出来了
0 10011110 0000 0000 0000 0000 0000 0000
0 10000011101 1111 1111 1111 1111 1111 1111 1111 110000000000000000000000
明显float和double的指数位不同,这就是尾数四舍五入后向指数进位造成的
好久没看这种基础的东西了,照着书现学现卖,有错误请楼主指出哈~