charからintへの型変換【ABC176 - C Multiple of 9 】
問題
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; }