Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], skipTags: ["script","noscript","style","textarea","code"], processEscapes: true }});

問題文

2つの整数 $A$，$B$ がある。
十進数での筆算によって $A - B$ を求める処理を以下に示す。

　1. $A$，$B$ を十進数で表現する。添字は下位から順に $0,1,2,...,n-1$ とし、 $A = A_{n-1} A_{n-2} ... A_{0}$，$B = B_{n-1} B_{n-2} ... B_{0}$ とする。 $n$ は十進数で表現した時の$A$の桁数とする。 $B$ の桁数が $n$ より小さいとき、上位桁に $0$ を補う。

　2. $borrow_{0} = 0$ とする。

　3. 以下の処理を $i = 0$ から $n-1$ まで繰り返す。

　　3.1. $A_{i} - borrow_{i} \geq B_{i}$ ならば、 $C_{i} = A_{i} - borrow_{i} - B_{i}$ ， $borrow_{i+1} = 0$とする。

　　3.2. $A_{i} - borrow_{i} \lt B_{i}$ ならば、 $C_{i} = A_{i} - borrow_{i} + 10 - B_{i}$ ， $borrow_{i+1} = 1$とする。

$A - B$ の計算結果は $C_{n-1} C_{n-2} ... C_{0}$ となる。ただし、最上位に連続する $0$ は取り除く。

繰り下がりを忘れると3.2の処理での $borrow_{i+1} = 1$ が $borrow_{i+1} = 0$ となる。
最大 $K$ 回繰り下がりを忘れたときの計算結果の最大値を求めよ。

入力

入力は以下の形式に従う。与えられる数は全て整数である。

$A$ $B$ $K$

制約

$1 \leq B \lt A \leq 10^9$

$1 \leq K \leq 9$

出力

計算結果の最大値を1行に出力せよ。

Sample Input 1

99 98 1

Output for the Sample Input 1

1

Sample Input 2

100 2 3

Output for the Sample Input 2

198

Sample Input 3

538 84 1

Output for the Sample Input 3

554

Sample Input 4

2012 1987 1

Output for the Sample Input 4

1025

Solution in C# (judge verdict: Accepted)

using System;

public class Hello
{
    public static void Main()
    {
        string[] line = Console.ReadLine().Trim().Split(' ');
        var aa = int.Parse(line[0]);
        var bb = int.Parse(line[1]);
        var k = int.Parse(line[2]);
        var a = getArray(line[0]);
        var aL = line[0].Length;
        var b = getArray(line[1]);
        var c = getArray((aa - bb).ToString());
        var d = getAns(a, b);
        var count = 0;
        var ret = new int[10];
        for (int i = 0; i < 10; i++) ret[i] = -1;
        for (int i = aL -1; i >= 0; i--)
        {
            if (d[i] > c[i] && count < k) { ret[i] = d[i]; count++; }
            else ret[i] = c[i];
        }
        var ans = "";
        for (int i = 0; i < aL; i++) ans += ret[aL - 1 - i].ToString();
        Console.WriteLine(int.Parse(ans));
    }
    public static int[] getAns(int[] a, int[] b)
    {
        var ret = new int[10];
        for (int i = 0; i < 10; i++)
            ret[i] = a[i] < b[i] ? a[i] + 10 - b[i] : a[i] - b[i];
        return ret;
    }
    public static int[] getArray(string s)
    {
        var sL = s.Length;
        var ret = new int[10];
        for (int i = 0; i < sL; i++)
            ret[i] = int.Parse(s[sL - 1 - i].ToString());
        return ret;
    }
}