Problem Statement
***Note: Please keep programs under 7000 characters in length. Thank you
Class Name: SquareDigits
Method Name: smallestResult
Parameters: int
Returns: int
Define the function S(x) as the sum of the squares of the digits of x.
For example: S(3)=3*3=9 and S(230)=2*2+3*3+0*0=13.
Define the set T(x) to be the set of unique numbers that are produced by
repeatedly applying S to x. That is: S(x), S(S(x)), S(S(S(x))), etc...
For example, repeatedly applying S to 37:
S(37)=3*3+7*7=58.
S(58)=5*5+8*8=89.
S(89)=145.
S(145)=42.
S(42)=20.
S(20)=4.
S(4)=16.
S(16)=37.
Note this sequence will repeat so we can stop calculating now and:
T(37)={58,89,145,42,20,4,16,37}.
However, note T(x) may not necessarily contain x.
Implement a class SquareDigits, which contains a method smallestResult. The
method takes an int, n, as a parameter and returns the smallest int, x, such
that T(x) contains n.
The method signature is (be sure your method is public):
int smallestResult(int n);
TopCoder will ensure n is non-negative and is between 0 and 199 inclusive.
Examples:
If n=0: S(0) = 0, so T(0)={0}, so the method should return 0.
If n=2: T(0) through T(10) do not contain the value 2. If x=11, however:
S(11)=1*1+1*1=2, so T(11) contains 2, and the method should return 11.
If n=10: T(0) through T(6) do not contain 10. If x=7:
S(7)=49.
S(49)=97.
S(97)=130.
S(130)=10.
S(10)=1.
and it starts to repeat...
so T(7) is {49,97,130,10,1}, which contains 10, and the method should return 7.
n=1 -> x=1
n=19 -> x=133
n=85 -> x=5
n=112 -> x=2666
Definition
Class:
SquareDigits
Method:
smallestResult
Parameters:
int
Returns:
int
Method signature:
int smallestResult(int param0)
(be sure your method is public)
topcoder练习第二题(500分),应该说也不难,但由于太久没编程也让我搞得一团糟。问题主要集中在两个方面,ArrayList的使用和数字与字符串之间的相互转换:
- ArrayList用来表示题目中提到的T集合,对循环构造T集合的终止条件开始没把握清楚,应该是不包含重复元素时循环。最初的想的条件是集合不空,结果导致死循环。
- 数字字符之间转换问题还是比较典型,我也看了很多网上的资料。在本题中由于需要按位求平方和,需要取没位的数字值,在总位数不确定的情况下用取模取余的方法显然不太合适,因此想到用转换的方法。以下是求平方和代码段:
- public static int S(int num) {
int sum = 0;
String snum = String.valueOf(num);
for (int i = 0; i < snum.length(); i++) {
String t=String.valueOf(snum.charAt(i));
int temp=Integer.parseInt(t);
sum += Math.pow(temp, 2);
}
return sum;
}
- 主要用了valueof和parseInt两个方法,先从数字转为字符再从字符转为数字。前一个没什么好说,parseInt却让我郁闷了一阵,因为其参数只能是字符串而我一直以为包括字符从而得不到正确结果。
从网上又搜了其他人的做法,大差不差:
- 最简单的办法: String s=""; int i=1; s=i+"";
- 将一个已知的字符如‘56’转换成可计算的数字56 :
'56'必须是字符数组: char[] ch = {'5', '6'}; String s = String.valueOf(ch); int i = Integer.parseInt(s); System.out.println(i); 字符的话: char ch = '5'; String s = String.valueOf(ch); int i = Integer.parseInt(s); System.out.println(i); 字符串的话直接: String s = "56"; int i = Integer.parseInt(s); System.out.println(i);
-
各种数字类型转换成字符串型: String s = String.valueOf( value); // 其中 value 为任意一种数字类型。 字符串型转换成各种数字类型: String s = "169"; byte b = Byte.parseByte( s ); short t = Short.parseShort( s ); int i = Integer.parseInt( s ); long l = Long.parseLong( s ); Float f = Float.parseFloat( s ); Double d = Double.parseDouble( s );
本题源代码:
public class SquareDigits {
/** public static int smallestResult(int n) {
for(int i=0; ;i++) { if (T(i).contains(n))
return i;
} }
public static ArrayList T (int n) { ArrayList Tlist=new ArrayList(); int temp=S(n); while(!Tlist.contains(temp)) { Tlist.add(temp); temp=S(temp); } return Tlist;
}
public static int S(int num) { int sum = 0; String snum = String.valueOf(num); for (int i = 0; i < snum.length(); i++) {
String t=String.valueOf(snum.charAt(i)); int temp=Integer.parseInt(t); sum += Math.pow(temp, 2); }
return sum;
}
public static void main(String[] args) { // TODO code application logic here int number = 2; int result=smallestResult(number); System.out.println(result); } }
相关推荐
java将字符串中数字转换为中文大写,在输出字符串java将字符串中数字转换为中文大写,在输出字符串java将字符串中数字转换为中文大写,在输出字符串java将字符串中数字转换为中文大写,在输出字符串java将字符串中数字...
在`NumToString`这个文件名中,我们可以猜测它可能包含了关于数字转换成字符串的示例代码或练习。通过查看和学习这样的代码,你可以更好地理解上述转换方法的用法和实践。记住,在处理字符串和数字转换时,始终要...
同时,为了输出或显示,可能需要将数字转换为字符串。在使用这些函数时,需要注意检查转换是否成功,以及处理可能出现的错误,例如无效的输入或溢出问题。 以下是一些示例代码片段,演示了如何使用这些函数: ```c...
C语言字符串与数字转换函数 C语言中提供了多种字符串与数字转换函数,以下是常用的几个函数: 1. atof() 函数:将字符串转换成浮点型数 atof() 函数的定义在stdlib.h头文件中,函数原型为:double atof(const ...
### Oracle 判断字符串是否能转换为数字的方法 在Oracle数据库中,我们经常需要处理各种数据类型之间的转换。尤其是在处理字符型数据时,有时我们需要判断一个字符串是否能够被成功地转换成数字类型。与SQL Server...
在Oracle数据库中,将字符串转换为数字是一项常见的操作,特别是在处理包含数字的字符串列时,可能需要进行数值计算或按照数值大小进行排序。本篇文章将深入探讨如何在SQL查询中利用Oracle提供的函数来实现这一目标...
### C语言字符串和数字转换函数详解 #### 1. atof(将字符串转换成浮点型数) - **函数原型**: ```c #include double atof(const char *nptr); ``` - **功能描述**: `atof` 函数用于将一个字符串转换成浮点型数...
从字符串中提取连续的字符数字转换为整数 本文档将详细介绍从字符串中提取连续的字符数字转换为整数的方法,並提供了完整的源代码,适合于那些想要编码实现字符串中提取连续的字符数字转换为整数的同学。 知识点1...
MFC和ATL框架提供了`CString`类,它包含`Format`方法,可以将数字转换为字符串,同时也支持其他格式化操作。 接下来是数字转字符串的转换。CRT提供了`itoa`、`ltoa`、`_i64toa`等函数,将整数转换为字符串,而`_...
本文将深入探讨易语言中的十六进制与字符串之间的转换,并结合提供的源码,解析相关知识点。 首先,我们要理解十六进制(Hexadecimal)是一种逢16进1的数制,它使用16个符号(0-9及A-F)来表示数值。在计算机科学中...
C语言常用数字和字符串转换函数,toi 字符串转换成整型数 atol 字符串转换成长整型数 atof 字符串转换成浮点型数 strtol 字符串转换成长整型数 strtoul 字符串转换成无符号长整型数 strtod 字符串转换成浮点数
在这个背景下,“CVI串口字符串16进制转换”涉及的是如何在CVI中处理串口接收到的字符串数据,并将其转化为16进制格式,以便进一步分析或存储。 首先,我们需要理解字符串和16进制之间的关系。字符串是由字符组成的...
C语言中将数字转换为字符串的功能,虽然没有直接的内建函数,但可以通过标准库函数如itoa(), sprintf()以及针对浮点数的fcvt()或gcvt()来实现。下面详细介绍这些方法及其相关知识点。 1. itoa()函数 itoa()是一个非...
|PowerBuilder 数组字符串相互转化 天津 李华锋 * * | | * *PowerBuilder 数组字符串相互转化 完全免费 * * | | * *如果你将这个程序放在你的网站上,我希望你能同时加上本站的链接 | | * | * | * *老字符串转数组...
number_format()函数用于将字符串转换为数字。它会在成功时返回格式化的数字,否则会在失败时给出E_WARNING。 <?php $num = "1000.314"; // 使用number_format()函数将字符串转换为数字 echo number_format...
字符串转数字是指将字符串类型的数据转换为数字类型的数据,例如将字符串 "123" 转换为整数 123。这种转换在编程中非常常见,例如在用户输入验证、数据处理、算法实现等方面都需要进行字符串到数字的转换。 CRT ...
以上就是关于C#中字符串的格式化及转换成数值的方法的详细介绍。在实际开发过程中,合理地使用这些方法能够极大地提高代码的可读性和效率。希望本文能对您有所帮助。如果您有任何疑问或建议,请随时留言交流。
例如,将字符串转换为数字值参数 IN 中的数值数据类型为 STRING,WSTRING;参数 OUT 中数值的数据类型为 CHAR,WCHAR,USINT,UINT,UDINT,SINT,INT,DINT,REAL,LREAL。 2. 字符串和数值相互进行转换指令 字符...
有时候我们需要将字符串中的数字提取出来,并转换为整数数组。这在处理数据时非常常见。 #### 使用`Split()`结合`int.Parse()` 首先,我们同样使用`Split()`方法将字符串分割成多个部分,然后遍历这些部分并将它们...
注意,`isNaN()` 会将字符串尝试转换成数值,所以 `"123abc" 也会被判断为数字,因为前三个字符是数字。 3. **Java** Java 提供了 `Character.isDigit()` 和 `Integer.parseInt()` 来判断单个字符或整个字符串。...