charからintへの型変換【ABC176 - C Multiple of 9 】

問題

atcoder.jp

long long型の変数に入力し、各桁の和を9で割りたいところだが、
制約が10^200000までなので、long long型の変数に入力するのには桁数が足りない。
そこで文字列を用いる

char型からint型に変換する方法

ここで必要なのがchar型からint型へのキャスト(変換)である。
それには次のようにする。

char c = '1';
int i = c-'0'; //char型の'1'からint型の1に変換した

実はchar型の'0'の内部表現は48なので(つまり'1'は49)、その分引いてあげねばならないのです。
ではなぜ、48でなく'0'を引くのかというと(48を引いても可能だが)私にもよくわかりませんでした。

提出したコード

#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0; i<(n); i++)
#define rep2(i,x,n) for(int i=x; i<(n); i++)
#define all(n) begin(n),end(n)
typedef long long ll;
const ll mod=pow(10,9)+7;

int main()
{
    string n;
    cin >> n;

    ll sum=0;
    rep(i,n.size())sum += n.at(i)-'0'; //←今回のミソ

    if(sum%9==0) cout << "Yes" << endl;
    else{
        cout << "No" << endl;
    }
    
    return 0;
}