????????今天闲来无事,打算把周三选修的JAVA作业给做了。题目也很简单,求1000以下的水仙花数
(也就是自幂数)。因为之前学过C,像这样简单的语法入门题自然是不在话下。
????????但就在打算偷个懒,草草写完交作业时,突然想给老师整个花活,让用户自己输入要求的数(结果这个花活花了一个钟头才写完,与之前的偷懒想法背道而驰)。
?
? ? ? ? 废话就不多说了,直接上代码,写完作业再去把之前HDLBits的坑给填了(笑死,根本填不完)。
?
就难点而言,可能是需要绕几个弯,先把用户数的位数求出来,再求当前数字的位数。
import java.util.Scanner;
public class homework1
{
public static void main(String[] args)
{
int a[]=new int[10],i=0,j=0,k=0,z=1;
long neednum;
long num=0;
int temp=0,temp1=0;
long sum_of_num=0;
System.out.println("请输入要求的水仙花数的上限制");
Scanner input=new Scanner(System.in);
neednum=input.nextInt();
for(i=1;i<10;i++,temp1++)
{
temp=(int) (neednum/Math.floor((Math.pow(10,i))));
if(temp<=0)
{
break;
}//求出用户输入的数字的位数 Math.floor向下取整
}
System.out.println("输入的数字为"+i+"位数");
for(num=100;num<neednum+1;num++)
{
for(j=1;j<10;j++)
{
temp=(int) Math.floor((num/(Math.pow(10,j))));
if(temp<=0)
{
break;
}
}//求出现在数字的位数
for(k=j,sum_of_num=0,temp1=0;k>0;k--)
{
a[k]=(int) Math.floor(((num-temp1)/Math.pow(10,k-1)));
temp1+=a[k]*Math.floor(Math.pow(10,k-1));
// System.out.print(""+a[k]);
sum_of_num+=((int)(Math.pow(a[k],j)));
}//统计每一位数的大小,并计算幂级数的总和
// System.out.print(" ");
if(sum_of_num==num)
{
System.out.print(+neednum+"以下自幂数有:"+sum_of_num+" ");
while(z++%5==0)
System.out.println();
}
}
}
}
可悲的是学了两三年C语言了,我还是只会一些基础得不行的算法。毕竟电技专业,平常的物理课那是又多又难,学校也不开数据结构与算法的课。只能用暴力循环来求解了,希望有大佬斧正,写出更快的代码(👴的电脑跑8位数字就用了一分钟)。
|