使用递归求和



为这个基本问题道歉,我是java的新手,已经在这个问题上呆了好几天了。我首先需要将字母转换为数字,然后使用递归来获得这些数字的和。我想我已经接近了,但我也意识到非常混乱

public static void main(String[] arg) {
String str= "11"; 
//////////////////////////
String s = "helloworld";
String t = "";
for (int i = 0; i < s.length(); ++i) {
char ch = s.charAt(i);
if (!t.isEmpty()) {
t += " ";
}
int n = (int)ch - (int)'a' + 1;
t += String.valueOf(n);
}
System.out.println(t);
//////////////////////////////
int sum=0;
int x=Integer.parseInt(t);
int y=recursion(x);
System.out.println("The Sum of the digits is: "+ y);
}   
public static int recursion(int y) {
if(y/10>=1) {
int tempvar =y%10;
int remain=y/10;
return tempvar + recursion(remain); 
}
else {            
return y;
}
}}

好的,首先,这行:int x=Integer.parseInt(t);将在运行时使程序崩溃,因为字符串t中有空格

if (!t.isEmpty()) {
t += " ";
}

其次,将字符串t解析为int是一个问题,因为字符串t中的数字可能会变得非常大。正在分析此。。对于int来说,非常大的数字也会在运行时产生异常。因此,一个更好的方法是把它作为一个字符串,在它上面循环,然后添加数字

我有两个解决方案:

  • I在t上循环并添加数字
  • 我假设您对t的大小有一些限制,以便可以将其解析为int(或long(,然后根据需要使用递归
public class Main {
public static void main(String[] args) {
String s = "hew";
String t = "";
for (int i = 0; i < s.length(); ++i) {
char ch = s.charAt(i);
int n = (int)ch - (int)'a' + 1;
t += String.valueOf(n);
}
System.out.println("t: "+t);

System.out.println("sum using string: " + getSumUsingString(t));
System.out.println("sum using int: " + getSumUsingLong(Long.parseLong(t), 0));
}
// the string function
private static long getSumUsingString(String t) {
long sum = 0;
for (int i = 0; i < t.length(); i++) {
sum += t.charAt(i)-48;
}
return sum;
}
// recursive function
private static long getSumUsingLong(long num, long sum) {
if (num==0) return sum;
sum += num % 10;
return getSumUsingLong(num / 10, sum);
}
}

注:

如果您真的需要将这个字符串t解析为一个数字,您可以使用Java中的BigInteger类来处理非常大的数字。