其他分享
首页 > 其他分享> > CodeForces 1567C Carrying Conundrum

CodeForces 1567C Carrying Conundrum

作者:互联网

题目链接:CodeForces 1567C Carrying Conundrum

题目大意:
小红把加法列竖式时的进位进到了该列左边的第二列,得到了错误的结果,给定一个错误的结果,求可以得到这个错误结果的加数对。

题解:
由于进位进到了左边第二列,所以每隔一列的加法结果是正确的,因此可以把这个错误的结果按照奇数位和偶数位分成两个正确的结果,再分别求出他们的加数对数量,相乘即为结果。
对于求一个数\(n\)的加数对个数,显然可知有\(n + 1\)对,分别为\(n+0\)、\((n-1)+1\)、\((n-2)+2\)、...、\(0+n\)。
由于当两组加数对的第一个加数或第二个加数都为\(0\)时,结果会重复,所以总结果要减去\(2\)。

#include <iostream>
#include <string>
using namespace std;
 
int main() {
    int t; cin >> t;
    while (t--) {
        string s, s1, s2;
        cin >> s;
        for (int i = 0; i < s.length(); ++i) {
            if (!(i & 1)) s1 += s[i];
            else s2 += s[i];
        }
        if (s2.empty()) cout << stoi(s1) - 1 << endl;
        else cout << (stoi(s1) + 1) * (stoi(s2) + 1) - 2 << endl;
    }
    return 0;
}

标签:错误,结果,Conundrum,s2,第二列,CodeForces,int,加数,Carrying
来源: https://www.cnblogs.com/IzumiSagiri/p/15236604.html