if(number%i==0){
sum+=i;
str+=i+"+";
}
}
if(sum==number){//如果因子之和,等于本身,则是完数
str=str.substring(0,str.length()-1);//去掉字符串最后一个多余的“+”;
System.out.println(number+"的因子有:
"+str);
returntrue;
}
returnfalse;
}
}
2.7编写输入正实数x,求平方不超过x的最大整数n,并输出。
程序运行结果:
第一种命令行方式输入
importjava.util.Scanner;
/**
*编写输入正实数x,求平方不超过x的最大整数n,并输出。
*命令行方式,输入正实数,输出结果
*@author段智敏
*/
publicclassWork2_7_1
{
publicstaticvoidmain(String[]args)
{
ScannerconsoleScanner=newScanner(System.in);
System.out.print("请输入正实数X:
");
Stringstr=consoleScanner.next();
intnumber=-1;
try
{
number=Integer.parseInt(str);
}
catch(NumberFormatExceptione)
{
System.out.println("输入非法字符,程序结束!
!
!
");
return;
}
if(number<1)
System.out.println("输入的数不是正实数,程序结束!
!
!
");
else
{
intn=(int)(Math.sqrt(number));
System.out.println("平方不超过"+number+"的最大整数,n="+n+";");
}
}
}
第二种窗口方式输入
运行结果如下图:
/**
*编写输入正实数x,求平方不超过x的最大整数n,并输出。
*弹出窗口方式
*@author段智敏
*/
importjavax.swing.JOptionPane;
publicclassWork2_7_2
{
privateintnumber;
publicWork2_7_2()
{
number=this.getIntegerNumber("请输入一个正实数",1);
if(number<1)
return;//非法,程序结束
intn=(int)(Math.sqrt(number));
showResult("平方不超过"+number+"的最大整数\nn="+n+";");
}
/**
*通过图形界面,得到符合规则的正整数的方法
*@parammessage-在弹出的对话框中,显示提示信息message
*@parammin-要求此数必须大于等于min
*/
publicintgetIntegerNumber(Stringmessage,intmin)
{
Stringstr=JOptionPane.showInputDialog(null,"请输入一个正整数","提示信息",
JOptionPane.INFORMATION_MESSAGE);
intnumber=-1;
try
{
number=Integer.parseInt(str);//得到输入的正整数
}
catch(Exceptione)
{
JOptionPane.showMessageDialog(null,"输入非数字字符\n程序结束","错误警告",
JOptionPane.ERROR_MESSAGE);
return-1;//输入的不是数字字符,程序结束
}
if(number{
JOptionPane.showMessageDialog(null,"输入的数不符合规则,不是正整数\n程序结束",
"错误警告",JOptionPane.ERROR_MESSAGE);
return-1;//输入的数不是大于2的正整数时候,程序结束
}
else
returnnumber;
}
/**
*弹出对话框,显示结果
*@paramstr-需要显示的字符串
*/
publicvoidshowResult(Stringstr)
{
JOptionPane.showMessageDialog(null,str,"输出结果",
JOptionPane.INFORMATION_MESSAGE);
}
publicstaticvoidmain(String[]args)
{
newWork2_7_2();
}
}
2.8输入正整数n,输出由n行n列星号字符组成的三角形图案。
程序运行结果:
源代码文件:
Work2_8.java
importjava.util.*;
/**
*输入正整数n,输出由n行n列星号字符组成的三角形图案。
*@author段智敏
*/
publicclassWork2_8
{
publicstaticvoidmain(Stringargs[])
{
ScannerconsoleScanner=newScanner(System.in);
System.out.print("请输入正整数n:
");
Stringstr=consoleScanner.next();
intn=-1;
try
{
n=Integer.parseInt(str);
}
catch(NumberFormatExceptione)
{
System.out.println("输入非法字符,程序结束!
!
!
");
return;
}
if(n<1)
System.out.println("输入的数不是正实数,程序结束!
!
!
");
else
{
for(inti=0;i{
for(intj=0;j{
System.out.print("");
}
for(intk=0;k
{
System.out.print("*");
}
System.out.println();
}
}
}
}
2.9设有整型变量x和y的值分别为5和110。
试指出执行了以下循环语句后,变量x和y的值分别多少?
1)while(x<=y)x*=2;
解:
x=160;y=110;
2)do{x=y/x;y=y-x;}while(y>=1);
解:
x=18;y=0;
2.10求小于999的所有水仙花数。
程序运行结果:
源代码文件:
Work2_10.java
/**
*求小于999的所有水仙花数
*@author段智敏
*/
publicclassWork2_10
{
publicstaticvoidmain(String[]args){
StringresultString=newString("1000之前的所有水仙花数有:
");//用来存结果的字符串
for(inti=100;i<999;i++)
{
if(isNarcissusNumber(i))
resultString+=""+i;
}
System.out.println(resultString.substring(0,resultString.length()-1));
}
publicstaticbooleanisNarcissusNumber(intm)//判断是否是水仙花数的方法
{
intnumber=m;//把m存起来
inta[]=newint[100];//用来存n每个位上的数
intamount=0;//表示n的位数
while(m>0)//通过循环得到m每个位上的数,存到数组中
{
a[amount]=m%10;
m=m/10;
amount++;
}
intsum=0;
for(intj=0;j{
sum+=Math.pow(a[j],amount);
}
if(number==sum)//如果累加的和等于这个数本身,则他是水仙花数,返回真
returntrue;
returnfalse;
}
2.11编程序解百鸡问题:
鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。
百钱买百鸡。
求鸡翁、鸡母和鸡雏各几何?
程序运行结果:
源代码文件:
Work2_11.java
/**
*鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。
*百钱买百鸡。
求鸡翁、鸡母和鸡雏各几何。
*@author段智敏
*/
publicclassWork2_11
{
publicstaticvoidmain(Stringargs[])
{
for(inti=0;i<=100;i++)
{
for(intj=0;j<=100;j++)
{
for(intk=0;k<=100;k+=3)//鸡雏的个数必须使3的倍数
{
if(((5*i+3*j+k/3)==100)&&(i+j+k==100))
System.out.println("鸡翁:
"+i+";鸡母:
"+j+";鸡雏:
"+k);
}
}
}
}
}
2.12编写程序,按下面的公式计算自然对数底e的值:
e=1+1/1!
+1/2!
+1/3!
+1/4!
+......
/**
*按公式计算:
e=1+1/1!
+1/2!
+1/3!
+1/4!
+......
*@author段智敏
*/
publicclassWork2_12
{
publicstaticvoidmain(Stringargs[])
{
intn=1000;//计算精度
doublee=1.0;
for(inti=1;i<=n;i++)
{
e=e+1.0/Work2_12.factorial(i);
}
System.out.println("e="+e);
}
/**
*计算阶乘的静态方法
*@param-需要计算阶乘的数
*@return-最后结果
*/
staticdoublefactorial(inta)
{
doublef=1.0;
for(intj=1;j<=a;j++)
f=f*j;
returnf;
}
}
2.13编写程序,用如下公式计算圆周率PI的近似值:
PI=4-4/3+4/5-4/7+4/9-4/11...
程序运行结果:
源代码文件:
Work2_13.java
/**
*圆周率计算
*@author段智敏
*/
publicclassWork2_13
{
publicstaticvoidmain(Stringargs[])
{
intnum=1000000;//控制计算的项数,越高,越准确
System.out.println("用公式计算圆周率,\n计算"+num+"项后圆周率的近似值为"
+Work2_13.getPai(num));
System.out.println("3.14是第"+Work2_13.getIndex(3.14)+"项,\t\t值为:
"
+Work2_13.getPai(Work2_13.getIndex(3.14)));
System.out.println("3.141是第"+Work2_13.getIndex(3.141)+"项,\t值为:
"
+Work2_13.getPai(Work2_13.getIndex(3.141)));
System.out.println("3.1415是第"+Work2_13.getIndex(3.1415)+"项,\t值为:
"
+Work2_13.getPai(Work2_13.getIndex(3.1415)));
System.out.println("3.14159是第"+Work2_13.getIndex(3.14159)+"项,\t值为:
"
+Work2_13.getPai(Work2_13.getIndex(3.14159)));
}
/**
*根据给出的数值,得到需要计算多少项才能得到这个数值
*
*@paramp-数值
*@return-项数
*/
publicstaticdoublegetIndex(doublep)
{
intr=1,num=1000000;//控制计算的项数,越高,越准确
doublei=1.0,pai=0.0,t=1.0;
while(r{
pai=pai+(4.0/i)*t;
t=-t;
i=i+2;
r++;
if(pai>=p&&pai<=(p+0.000001))
break;
}
returnr;
}
/**
*根据给出的数,按公式进行计算圆周率
*@paramnum-公式项数
*@return返回按公式计算出的圆周率
*/
publicstaticdoublegetPai(doublenum)
{
intr=1;
doublei=1.0,pai=0.0,t=1.0;
while(r{
pai=pai+(4.0/i)*t;
t=-t;
i=i+2;
r++;
}
returnpai;
}
}
2.14回文整数是指正读法和反读相同的整数,编写一个程序,输入一个整数,判断他是否为回文整数。
程序运行结果:
importjavax.swing.JOptionPane;
/**
*输入整数,判断是否是回文整数
*@author段智敏
*/
publicclassWork2_14
{
privateintnumber;
publicWork2_14()
{
number=getIntegerNumber("输入一个正整数n",1);//要求是>=1的整数
if(number<0)
return;
if(isPalindrome(number))
showResult("输入的正整数“"+number+"”是回文数");
else
showResult("输入的正整数“"+number+"”不是回文数");
}
/**
*判断是否是回文数
*@paramnumb