对于由数字算法组成的字符串

时间:2016-01-04 15:51:09

标签: java string algorithm int

如果我想制作一个具有以下规则的算法:

  

从右到左工作,

     

对奇数位置的数字求和(第一,第三,第五,   等)并将总数乘以3;

     

对偶数位置的数字求和(第二,第四,第六,   等);

问题1:我如何在开头使int或double接受数字“0”,以防止它看到我试图使用八进制。

问题2:具体如何获取具体位置,我已经考虑将其放入一个字符串并试图考虑使用子字符串,但我不知道它是如何工作的。虽然我想过像

这样的东西
  String a = "036000291452";
for (int b = 0; a.length() > b; b + 2) {
    String c = a.substring(b)
//some converting * 3...
}

尝试获取奇数位置(或偶数),然后将其转换为int。但这并没有打印出一个位置。提前感谢您的任何帮助和任何考虑。

4 个答案:

答案 0 :(得分:2)

  

如何让intdouble在开头接受数字“0”以防止它看到我尝试使用八进制?

由于您将数字作为字符串传递,因此整数文字的八进制/十进制约定不适用于您的情况。通常,通过,从数字常量中删除前导零。

  

具体如何获得具体职位

由于你是从右到左工作,从a.length()-1开始,然后向下走两步,直到你得到负面指数。

要从位置a的字符i获取数字,请使用Character.digit,如下所示:

int digit = Character.digit(a.charAt(i), 10);

答案 1 :(得分:1)

没有必要按照你的说法去做。 简单地将偶数和奇数加起来

lookup <- data.table(Date = as.Date(c("2001-01-01", "2001-01-02")), 
                     #you could extract the preceding values using unique(df[["Date"]])
                     NewBatch = c("hello", "world"))
df[lookup, NewBatch := i.NewBatch, on = "Date"]
#    Batch       Date NewBatch
# 1:     A 2001-01-01    hello
# 2:     B 2001-01-01    hello
# 3:     C 2001-01-02    world
# 4:     D 2001-01-02    world
# 5:     E 2001-01-03       NA
# 6:     F 2001-01-03       NA
# 7:     G 2001-01-04       NA
# 8:     H 2001-01-04       NA
# 9:     I 2001-01-05       NA
#10:     J 2001-01-05       NA

答案 2 :(得分:1)

既然你应该从右到左工作,我会说最右边的位置是位置1.如果使用String你可以这样做:

String input = "036000291452";
int sumOdd = 0, sumEven = 0;
for (int pos = 1; pos <= input.length(); pos++) {
    if (pos % 2 == 1) {
        sumOdd += input.charAt(input.length() - pos) - '0';
    } else {
        sumEven += input.charAt(input.length() - pos) - '0';
    }
}

答案 3 :(得分:0)

您可以使用String a = "036000291452"; int odd = 0; int eve = 0; for(int i = a.length()-2; i >= 0; i -= 2) { odd += a.charAt(i)-'0'; } odd *= 3; for(int i = a.length()-1; i >= 0; i -= 2) { eve += a.charAt(i)-'0'; } //do something with odd and even 简单地获取给定位置的字符/数字。所以:

odd

例如this jdoodle打印42eve)和18String)的结果。