如何获得数字的第一位和最后一位数字,并结合两者

时间:2019-01-07 10:48:58

标签: java

示例: 如果我给一个数字12345,我应该得到一个类似15243的答案

以相同的方式如果它是123456,我应该得到162534

我已经尝试使用反向技术获取第一个值并附加最后一个值

public class MyFirstJavaProgram {

  public static void main(String []args) {

    String str = "12345";
    String val = str;

    char a;
    int num=0;
    int d=0;
    int n;

    for(int i=0; i<=str.length()/2; i++) {
      a = str.charAt(i);

      num = num*10+Character.getNumericValue(a);
      if(Integer.parseInt(str)!=0){
          d=Integer.parseInt(str)%10;
          num = num*10+d;
          n=Integer.parseInt(str)/10;
          str = Integer.toString(n);
      }          
    }
    System.out.println(num);

  }
}

如果我给出偶数或奇数,我应该得到结果

6 个答案:

答案 0 :(得分:3)

如果没有做可能为您做的家庭作业,请想象您有一个循环,其中有两个整数变量a和b。变量a和b是字符串索引。

您正在从字符串中的a,b,a,b,a,b等位置获取字符。

但是a和b的值需要针对每次迭代进行更改。如果String的长度为n,则a将遵循序列0、1、2、3 ...,而b将遵循序列(n-1),(n-2),(n-3)等

循环应在a

答案 1 :(得分:0)

这是我为您运动的解决方案:

方法参数“ A”是要解析的整数。

首先从给定的数字创建Char Array,然后对其进行迭代。如果i%2 == 0,则表示您从开头开始输入数字,否则从结尾开始输入

public static int algorithm(int A) {
    StringBuilder shuffleNumber = new StringBuilder();
    char[] numbersArray = Integer.toString(A).toCharArray();
    for (int i = 0; i < numbersArray.length; i++) {
        if (i % 2 == 0)
            shuffleNumber.append(numbersArray[i / 2]);
        else
            shuffleNumber.append(numbersArray[numbersArray.length - i / 2 - 1]);
    }
    return Integer.parseInt(shuffleNumber.toString());
}

答案 2 :(得分:0)

通过从Stringint的转换(这是不需要IMHO的),您使事情变得复杂。您可以将代码简化为以下内容:

public static void main(String[] args) {
    String str = "123456";
    StringBuffer sb = new StringBuffer();
    int j = str.length() - 1;
    for (int i = 0; i < str.length() / 2; i++) {
        if (i != j) {
            sb.append(str.charAt(i));
            sb.append(str.charAt(j));
            j--;
        }
    }
    if (str.length() % 2 != 0) { // if length is odd
        sb.append(str.charAt((str.length() / 2)));
    }
    System.out.println(sb);
} 

逻辑:

  • i表示从字符串开头开始的索引
  • j表示从字符串末尾开始的索引
  • 在循环的每次迭代中,我们递增i并递减j 直到我们到达字符串的中间。
  • 如果String的长度为奇数,则我们附加中间元素 到缓冲区

答案 3 :(得分:0)

如果您想要一个不带字符串方法的解决方案,那么没有一个那么复杂了:

public static void main(String[] args) throws IOException {
    String str = "1234567";
    int len = str.length();
    int num=0;
    char a;

    for(int i = 0; i < len / 2; i++) {
        a = str.charAt(i);
        num = num * 10 + Character.getNumericValue(a);
        a = str.charAt(len -1 - i);
        num = num * 10 + Character.getNumericValue(a);
    }

    if (len % 2 == 1) {
        a = str.charAt(str.length() / 2);
        num = num * 10 + Character.getNumericValue(a);
    }

    System.out.println(num);
}

将打印

1726354

请检查最后一个数字是否为奇数。

答案 4 :(得分:0)

public class MyFirstJavaProgram {

public static void main(String []args) {

String str = "12345678";
int val = str.length();

char a;
int num=0;
int d=0;
int n;

for(int i=0; i<=str.length()-2; i++)
{
      a = str.charAt(i);
      num = num*10+Character.getNumericValue(a);
      if(Integer.parseInt(str)!=0)
      {
          d=Integer.parseInt(str)%10;
          num = num*10+d;
          n=Integer.parseInt(str)/10;
          str = Integer.toString( n );
      }

}

if(val%2!=0)
{
    num = num*10+Integer.parseInt(str)%10;
     System.out.println(num);
}
else{System.out.println(num);}

}
}

这正在解决我的问题...谢谢

答案 5 :(得分:0)

以下是我的解决方案-

 public static void solution(String s) {
        StringBuffer st = new StringBuffer();

        for (int i = 0; i < s.length() / 2; i++) {
            st.append(s.charAt(i));
            st.append(s.charAt(s.length() - 1 - i)); // appending characters from last
        }
        if (s.length() % 2 != 0) {
            st.append(s.charAt(s.length() / 2));
        }
        System.out.println(Integer.parseInt(st.toString()));
    }

我的逻辑是继续将第一个和最后一个字符追加到新字符串,直到i