高分求java特殊数字判断的程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高分求java特殊数字判断的程序相关的知识,希望对你有一定的参考价值。
最终运行结果如图:
一.要求:
1.从键盘输入任意数字,判断该数字是否是快乐数、哈沙德数、过剩数、完全数和自我描述数;
2.程序能够检查错误;
ERROR: Incorrect number of command line args
ERROR: Number of digits must be strictly less than 11
ERROR: Not an integer
ERROR: Number must be positive and non zero
3.使用嵌套循环;
二.知识补充:
1.快乐数(Happy Number):该数字所有数位的平方和,得到的新数再次求所有数位的平方和,如此重复进行,最终结果必为1。比如28是一个快乐数,因为28 →2^2+8^2=68 → 6^2+8^2=100 → 1^2+0^2+0^2=1;
2.哈沙德数(HarshadNumber):能被所有数位之和整除的正整数。比如18是一个哈沙德数,因为18可以被1+8=9整除;
3.过剩数(AbundantNumber):除它本身外所有正约数的和大于它本身的自然数。比如12是一个过剩数,因为它的约数和=1+2+3+4+6=16>12;
4.完全数(PerfectNumber):除它本身外所有正约数的和等于它本身的自然数。比如6是一个完全数,因为1+2+3=6.
5.自我描述数(Self-descriptive Number):一个n位数,从左到右依次给每位数标号,0到N-1,处于各标号位置上的数在这个n位数中出现的次数依次写出,与n位数一致,就是自我描述数。
比如2020是一个自我描述数,从左到右依次给每位数标号,0,1,2,3,而0在2020中出现了两次,1在2020中出现了零次,2在2020中出现了两次,3在2020中出现了零次,把次数写来是两零两零,等于2020,所以2020是自我描述数。
public class NumberFun
public static void main(String[] args)
// args = new String[]"28";
String sn = null;
if(args==null || args.length!=1 || (sn=args[0].trim()).isEmpty())
System.out.println("Incorrect number of command line args");
else
if(sn.length()>11)
System.out.println("Number of digits must be strictly less than 11");
else
try
int num = Integer.valueOf(sn);
if(num<=0)
System.out.println("Number must be positive and non zero");
else
if(isHappyNumber(num))
System.out.println(num+" is a Happy Number");
if(isHarshadNumber(num))
System.out.println(num+" is a Harshad Number");
if(isAbundantNumber(num))
System.out.println(num+" is a Abundant Number");
if(isPerfectNumber(num))
System.out.println(num+" is a Perfect Number");
if(isSelfDescriptiveNumber(num))
System.out.println(num+" is a Self-descriptive Number");
catch (NumberFormatException e)
System.out.println("Not an integer");
/** 快乐数 */
private static boolean isHappyNumber(int num)
int i,j,r=num;
while(r>10)
i=r;
r=0;
while(i>=10)
j=i%10;
i=i/10;
r+=Math.pow(j, 2);
r+=Math.pow(i, 2);
return r==1;
/** 哈沙德数 */
private static boolean isHarshadNumber(int num)
if(num<=10)return true;
int i=num,j,r=0;
while(i>=10)
j=i%10;
i=i/10;
r+=j;
r+=i;
return num%r==0;
/** 完全数 */
private static boolean isPerfectNumber(int num)
if(num<=2)return false;
int i=num/2,j=1,r=0;
while(j<=i)
if(num%j==0)
r+=j;
j++;
return r==num;
/** 过剩数 */
private static boolean isAbundantNumber(int num)
if(num<10)return false;
int i=num/2,j=1,r=0;
while(j<=i)
if(num%j==0)
r+=j;
j++;
return r>num;
/** 自我描述数 */
private static boolean isSelfDescriptiveNumber(int num)
if(num<=10)return false;
int[] r = new int[10];
int[] ns = new int[10];
int i=num,j=0,t;
while(i>=10)
t= i%10;
ns[j++]=t;
r[t]++;
i=i/10;
ns[j++]=i;
r[i]++;
//ns为降序
for (int k =0; k <j; k++)
t = ns[j-1-k];
if(r[k]!=t)
return false;
return true;
参考技术A 有没有可能一个数同时属于几种的情况?
高分求-VB 把ANSI文本转换成UTF-8,多谢!!
比如在F盘的TEMP文件夹里有一个A.TXT,其编码为ansi,希望高手帮写个程序,把该文本转换成UFT-8的编码
要求该函数或过程传入的参数是文件的路径,比如传入"f:\temp\a.txt"
然后就会将f:\temp\a.txt转换成UTF-8编码格式的文件,替换掉原先的a.txt
成功后追加100分,不胜感激!
强烈鄙视一楼,首先是你复制来的答案就是我以前找UTF-8转ANSI时人家给的答案,而你一字不差的抄了下来,你也不看看标题,现在是反的。
分二步:
一、建立一个模块,复制下面代码
Option Explicit
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Private Const CP_UTF8 = 65001
'读文件至变量
Private Function GetFile(FileName As String) As String
Dim i As Integer, BB() As Byte
If Dir(FileName) = "" Then Exit Function
i = FreeFile
ReDim BB(FileLen(FileName) - 1)
Open FileName For Binary As #i
Get #i, , BB
Close #i
GetFile = BB
End Function
'功能: 把Utf8字符转化成ANSI字符
Public Function UTF8_Decode(FileName As String) As String
Dim sUTF8 As String
Dim lngUtf8Size As Long
Dim strBuffer As String
Dim lngBufferSize As Long
Dim lngResult As Long
Dim bytUtf8() As Byte
Dim n As Long
sUTF8 = GetFile(FileName)
If LenB(sUTF8) = 0 Then Exit Function
On Error GoTo EndFunction
bytUtf8 = sUTF8
lngUtf8Size = UBound(bytUtf8) + 1
lngBufferSize = lngUtf8Size * 2
strBuffer = String$(lngBufferSize, vbNullChar)
lngResult = MultiByteToWideChar(CP_UTF8, 0, bytUtf8(0), _
lngUtf8Size, StrPtr(strBuffer), lngBufferSize)
If lngResult Then
UTF8_Decode = Left(strBuffer, lngResult)
End If
EndFunction:
End Function
二、调用举例:
如果你想把一个"c:\1.txt"的UTF-8文件转换为ANSI编码,可这样调用
dim s as string
s=UTF8_Decode("c:\1.txt") '文件名请根据实际修改
此时,s存放的就是ANSI格式编码了,不会出现乱码问题
参考资料:http://zhidao.baidu.com/question/123224632.html?fr=im2
参考技术A Private Sub AnsiToUtf8 (FileName as String)Dim b() As Byte, S As String
Dim ADO_Stream As Object
If Dir(FileName) = "" Then Exit Sub
ReDim b(FileLen(FileName))
Open FileName For Binary As #1
Get #1, , b
Close #1
S = StrConv(b, vbUnicode)
Set ADO_Stream = CreateObject("ADODB.Stream")
With ADO_Stream
.Type = 2
.Mode = 3
.Charset = "utf-8"
.open
.WriteText S
.SaveToFile FileName, 2
End With
Set ADO_Stream = Nothing
End Sub
参考资料:http://zhidao.baidu.com/question/83609963.html?si=3
本回答被提问者采纳以上是关于高分求java特殊数字判断的程序的主要内容,如果未能解决你的问题,请参考以下文章
Android求解,求一个判断是不是为数字的正则表达式,要求全是数字,不能有特殊符号,汉字,字母,小数也不行
请问用java语言做一个求由数字组成的字符串中数字之和的简单程序?