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";
}
}