两段代码有什么区别?

所以最近我试图解决一个由于某种原因我写了一些代码不起作用的问题(代码#1)

#include <iostream>

typedef long long ll;
using namespace std;
ll k;
ll x, t;

int main()
{
    cin.tie(NULL);
    ios_base::sync_with_stdio(false);

    cin >> t;
    while(t--)
    {
        cin >> k >> x;
        ll i = 0;
        while(i < 10)
        {
            if (i % 9 == x)
                break;
            ++i;
        }
        k--;
        i += 9*k;
        cout << i << "\n";
    }
}

而下面的代码可以工作

#include <iostream>

typedef long long ll;
using namespace std;
ll k;
ll x, t;

int main()
{
    cin.tie(NULL);
    ios_base::sync_with_stdio(false);

    cin >> t;
    while(t--)
    {
        cin >> k >> x;
        k--;
        ll i = 9*k + x;
        cout << i << "\n";
    }
}

x的约束:1 <= x <= 9                    k:1 <= k <= 10 ^ 12。 请注意,x永远不会为0,因此从根本上讲,i为1/0的问题并不是原因。 但是我仍然不明白为什么这样做,因为结果似乎是一样的。有什么区别和反例?

评论