字节青训营 数字魔法的加一操作

时间:2024-11-16 07:02:42

问题描述

小 W 拥有一项魔法,可以对任意数字字符串进行加一的操作,比如当他拿到 “798” 这样的数字字符串,每一次操作,他会将其中每一个字符进行加一,比如经过一次操作后得到了 “8109”。他想知道操作 k 次后,这个数字将会变成多少,由于答案可能很大,最终结果需要对 1000000007 取模

标准输入

第一行输入 2 个整数 n1 <= n <= 100000)和 k (0 <= k <= 100000),表示初始数字字符串长度和操作次数

第二行输入 1 个 n 位数字字符串 (1 <= s1 <= 90 <= si <= 91 < 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);
    }
}