如果我想制作一个具有以下规则的算法:
从右到左工作,
对奇数位置的数字求和(第一,第三,第五, 等)并将总数乘以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。但这并没有打印出一个位置。提前感谢您的任何帮助和任何考虑。
答案 0 :(得分:2)
如何让
int
或double
在开头接受数字“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打印42
(eve
)和18
(String
)的结果。