Java 循环以添加数字字符串

Java 循环以添加数字字符串,java,string,algorithm,integer,Java,String,Algorithm,Integer,我试着做一个练习来补充 String nb = "135"; String nb2 = "135"; 结果应该是一个字符串“270” 我不知道该怎么做……我试着做一个for循环并做一个加法:nb.charAt(I)+nb2.charAt(I),但没有成功,我不知道我该如何处理结转 编辑:我尝试不使用Integer或biginger,只使用字符串,这就是我尝试使用for循环的原因 谢谢你的提示。试试下面的片段: String s1 = "135"; String s2 = "135";

我试着做一个练习来补充

String nb = "135";
String nb2 = "135";
结果应该是一个字符串
“270”

我不知道该怎么做……我试着做一个for循环并做一个加法:
nb.charAt(I)+nb2.charAt(I)
,但没有成功,我不知道我该如何处理结转

编辑:我尝试不使用
Integer
biginger
,只使用字符串,这就是我尝试使用for循环的原因

谢谢你的提示。

试试下面的片段:

String s1 = "135";
    String s2 = "135";
    String result = Integer.toString (Integer.parseInt(s1)+Integer.parseInt(s2));

尝试使用Integer.parseInt(nb.charAt(i))+Integer.parseInt(nb2.charAt(i))将字符转换为int

您需要将字符串转换为数字才能添加它们。让我们使用
biginger
,以防数字太大:

String nb  = "135";
String nb2 = "135";

BigInteger num1 = new BigInteger(nb);
BigInteger num2 = new BigInteger(nb2);

String result = num1.add(num2).toString();

您可以使用
Character.numericValue
为您提供字符的整数值,这可能会帮助您编写方法。如果没有数值,此方法也将返回
-1
,如果它是分数,则返回
-2
,如1/2的字符字符串str=“”

按如下方式操作:

public class Main {
    public static void main(String args[]) {
        System.out.println(getSum("270", "270"));
        System.out.println(getSum("3270", "270"));
        System.out.println(getSum("270", "3270"));
    }

    static String getSum(String n1, String n2) {
        StringBuilder sb = new StringBuilder();
        int i, n, cf = 0, nl1 = n1.length(), nl2 = n2.length(), max = nl1 > nl2 ? nl1 : nl2, diff = Math.abs(nl1 - nl2);

        for (i = max - diff - 1; i >= 0; i--) {
            if (nl1 > nl2) {
                n = cf + Integer.parseInt(String.valueOf(n1.charAt(i + diff)))
                        + Integer.parseInt(String.valueOf(n2.charAt(i)));
            } else {
                n = cf + Integer.parseInt(String.valueOf(n1.charAt(i)))
                        + Integer.parseInt(String.valueOf(n2.charAt(i + diff)));
            }
            if (n > 9) {
                sb.append(n % 10);
                cf = n / 10;
            } else {
                sb.append(n);
                cf = 0;
            }
        }
        if (nl1 > nl2) {
            for (int j = i + 1; j >= 0; j--) {
                sb.append(n1.charAt(j));
            }
        } else if (nl1 < nl2) {
            for (int j = i + 1; j >= 0; j--) {
                sb.append(n2.charAt(j));
            }
        }
        return sb.reverse().toString();
    }
}

试试这个我希望对你有用

code

public static int convert_String_To_Number(String numStr,String numStr2) {
                char ch[] = numStr.toCharArray();
                char ch2[] = numStr2.toCharArray();
                int sum1 = 0;
                int sum=0;
                //get ascii value for zero
                int zeroAscii = (int)'0';
                for (char c:ch) {
                    int tmpAscii = (int)c;
                    sum = (sum*10)+(tmpAscii-zeroAscii);

                }
for (char d:ch2) {
                    int tmpAscii = (int)d;
                    sum1 = (sum*10)+(tmpAscii-zeroAscii);

                }

                return sum+sum1;
            }
            public static void main(String a[]) {
                System.out.println("\"123 + 123\" == "+convert_String_To_Number("123" , "123"));

            }
        }

我想提出一个更简洁的解决方案,将两个正数相加并返回结果。只需在添加2位数字时保持进位,如果进位大于0,则在末尾添加进位

public class Main{
    public static void main(String[] args) {
        System.out.println(addTwoNumbers("135","135"));
    }

    private static String addTwoNumbers(String s1,String s2){
        if(s1.length() < s2.length()) return addTwoNumbers(s2,s1);
        StringBuilder result = new StringBuilder("");
        int ptr2 = s2.length() - 1,carry = 0;
        for(int i=s1.length()-1;i>=0;--i){
             int res = s1.charAt(i) - '0' + (ptr2 < 0 ? 0 : s2.charAt(ptr2--) - '0') + carry;
             result.append(res % 10);
             carry = res / 10;
        }

        if(carry > 0)  result.append(carry);
        return trimLeadingZeroes(result.reverse().toString());
    }

    private static String trimLeadingZeroes(String str){
        for(int i=0;i<str.length();++i){
            if(str.charAt(i) != '0') return str.substring(i); 
        }

        return "0";
    }
}
公共类主{
公共静态void main(字符串[]args){
系统输出打印LN(添加两个数字(“135”、“135”));
}
私有静态字符串addTwoNumber(字符串s1、字符串s2){
if(s1.length()=0;--i){
int res=s1.字符(i)-'0'+(ptr2<0?0:s2.字符(ptr2-)-'0')+进位;
结果:追加(res%10);
进位=res/10;
}
如果(进位>0)结果。追加(进位);
返回trimLeadingZeroes(result.reverse().toString());
}
私有静态字符串trimLeadingZeroes(字符串str){


对于(int i=0;i)您必须对字符串中的所有数字求和,还是将字符串转换为数字并求和?从最后一个到第一个并保持进位。字符串可能的最大长度是多少?
nb.charAt(i)+nb2.charAt(i)
不会做你认为它会做的事情。@vivek_23如果字符串长度为100,没有最大长度限制?谢谢,但我尽量不使用
整数
大整数
,只有字符串,这就是为什么我尝试使用for循环
整数的原因。parseInt
会给你一个
整数
,而不是
整数
@Slackow OP的意思是什么他不能使用
Integer
类中的方法,因为这可能是一个家庭作业问题。如果字符串长度为100怎么办?如果字符串长度为100怎么办?那么我们必须使用
biginger
,但这不是问题中的要求。好的,从OP中澄清。谢谢,但我尽量不使用
Integer
de>BigInteger
,只有字符串这就是为什么我尝试使用a来表示loopsome,这正是我想要做的,非常感谢。@samuel-这个程序有问题。尝试添加
3270
270
,它将因
StringIndexOutOfBoundsException
而失败。你检查了我的答案吗?@ArvindKumarAvinashmber应该被交换,也就是说,如果你加上270+3270,这个就行了,一个简单的交换就可以了……这是一个简单的猜测。。lol@SHIVANSHNARAYAN这可能是一个简单的猜测,但通常情况下,答案需要完整,以便其他人可以从中学习。我这么说是因为他们很少有机会阅读答案下面的评论。@vivek_23当然会做编辑。但我也建议多读注释,因为它们也很有帮助
sum
sum1
将在这里产生相同的结果,您永远不会使用第二个数组。此外,这相当于使用parseInt,它不考虑字符串高于整数限制的情况。是的,谢谢您的帮助为我照明。我已经编辑了代码。
public static int convert_String_To_Number(String numStr,String numStr2) {
                char ch[] = numStr.toCharArray();
                char ch2[] = numStr2.toCharArray();
                int sum1 = 0;
                int sum=0;
                //get ascii value for zero
                int zeroAscii = (int)'0';
                for (char c:ch) {
                    int tmpAscii = (int)c;
                    sum = (sum*10)+(tmpAscii-zeroAscii);

                }
for (char d:ch2) {
                    int tmpAscii = (int)d;
                    sum1 = (sum*10)+(tmpAscii-zeroAscii);

                }

                return sum+sum1;
            }
            public static void main(String a[]) {
                System.out.println("\"123 + 123\" == "+convert_String_To_Number("123" , "123"));

            }
        }
public class Main{
    public static void main(String[] args) {
        System.out.println(addTwoNumbers("135","135"));
    }

    private static String addTwoNumbers(String s1,String s2){
        if(s1.length() < s2.length()) return addTwoNumbers(s2,s1);
        StringBuilder result = new StringBuilder("");
        int ptr2 = s2.length() - 1,carry = 0;
        for(int i=s1.length()-1;i>=0;--i){
             int res = s1.charAt(i) - '0' + (ptr2 < 0 ? 0 : s2.charAt(ptr2--) - '0') + carry;
             result.append(res % 10);
             carry = res / 10;
        }

        if(carry > 0)  result.append(carry);
        return trimLeadingZeroes(result.reverse().toString());
    }

    private static String trimLeadingZeroes(String str){
        for(int i=0;i<str.length();++i){
            if(str.charAt(i) != '0') return str.substring(i); 
        }

        return "0";
    }
}