问题描述
小 W 拥有一项魔法,可以对任意数字字符串进行加一的操作,比如当他拿到 “798” 这样的数字字符串,每一次操作,他会将其中每一个字符进行加一,比如经过一次操作后得到了 “8109”。他想知道操作 k
次后,这个数字将会变成多少,由于答案可能很大,最终结果需要对 1000000007 取模
标准输入
第一行输入 2 个整数 n
(1 <= n <= 100000
)和 k
(0 <= k <= 100000
),表示初始数字字符串长度和操作次数
第二行输入 1 个 n
位数字字符串 (1 <= s1 <= 9
, 0 <= si <= 9
, 1 < i <= n
)
标准输出
一行答案,操作 k
次后的结果
样例输入 1
3 1
798
样例输出 1
8109
样例解释
7->8 9->10 8->9
所以结果为 8109
样例输入 2
3 3
798
样例输出 2
103221
思路:没什么好说的,这里是java,所以,BigInteger,小子!其他的按照题意做就好了
import java.math.BigInteger;
import javax.naming.Binding;
public class Main {
public static int solution(int n, int k, String num_str) {
int i = 0;
char[] numChArray = num_str.toCharArray();
StringBuilder stringBuilder = new StringBuilder();
while (i < k) {
if (i != 0) {
numChArray = stringBuilder.toString().toCharArray();
stringBuilder = new StringBuilder();
}
for (int j = 0; j < numChArray.length; j++) {
stringBuilder.append(numChArray[j]=='9'? "10":++numChArray[j]);
}
i++;
}
BigInteger bigInteger = new BigInteger(stringBuilder.toString());
BigInteger mod = new BigInteger(String.valueOf(1000000007));
BigInteger mod2 = bigInteger.mod(mod);
return Integer.parseInt(mod2.toString());
}
public static void main(String[] args) {
// You can add more test cases here
System.out.println(solution(3, 1, "798") == 8109);
System.out.println(solution(3, 3, "798") == 103221);
}
}