No.539 インクリメント (成果物:文字列で表された数字の和)

Quiz

https://yukicoder.me/problems/no/539

AC Code

https://yukicoder.me/submissions/353645

感想

  • やるだけなのだが、意外と骨が折れる
  • 文字列で表された数字の和はたまに作ることがあるので関数化しておきたい

文字列で表された数字の和

string zero_padding(string s, ll len){
    ll diff = len - s.size();
    stringstream ss;
    FOR(i, 0, diff){
        ss << '0';
    }
    ss << s;
    return ss.str();
}

ll ctoi(char c){
    ll v = c - '0';
    return v;
}

string string_add(string s, string t){
    ll L = max(s.size(), t.size());
    s = zero_padding(s, L);
    t = zero_padding(t, L);

    stringstream ss;
    ll carry = 0; // 繰り上がり
    for(int i=L-1; i>=0; i--){
        ll v = ctoi(s[i]) + ctoi(t[i]) + carry;
        if(v>9){
            carry = 1;
            v = v%10;
        }else{
            carry = 0;
        }
        ss << v;
    }
    if(carry==1){
        ss << 1;
    }
    string ret = ss.str();
    reverse(ALL(ret));
    return ret;
}

getlineとcinの混合に注意

  • cin > Tの後、文字列はスペースを含むのでgetlineをした
  • しかし、cinの後には改行文字が残っており、最初のgetlineでそれを読んでしまう
  • 混ぜるな危険
  • 今回は余分な改行文字を捨てた
ll T;
cin >> T;
string dustbox;
getline(cin, dustbox);