题解:P13729 【MGVOI R1-A】超级奇数(odd)

· · 题解

P13729 【MGVOI R1-A】超级奇数(odd)

题意

给你 T 个正整数 a,要加上一个的正整数 b,使其 a+b 成为超级奇数,问你最小的 b 是多少? ::::info[超级奇数的定义]{open} 对于一个正整数,如果其中的每一位都是奇数,则定义它是一个超级奇数。 ::::

思路

因为每一个数 a 都较大,所以依次从 a 往上加,一个一个数的尝试,是不行的。

所以本题考虑贪心,因为这个数的位数较少,所以我们可以从最高位到最低位依次遍历。找到第一位不是奇数的位,那么就要将这一位的数字增加,使其变为奇数,也就是将这一位加 1,然后让这后面所有的数字都变为 1

让这个数与从那一位偶数开始后的 a 相减,就是我们要求的 b

#include<bits/stdc++.h>
#define int long long
using namespace std;
int t;
signed main()
{
    cin>>t;
    while(t--)
    {
        string s;
        cin>>s;
        int s1=0,s2=0;
        for(int i=0;i<s.size();i++)
            if((s[i]-'0')%2==1) continue;
            else
            {
                s1+=(s[i]-'0')+1;
                s2+=(s[i]-'0'); 
                for(int j=i+1;j<s.size();j++)
                {
                    s1=s1*10+1;
                    s2=s2*10+(s[j]-'0'); 
                }
                break;
            } 
        cout<<s1-s2<<endl;
    }
    return 0;
}