yukicoder No.432 占い(Easy)
問題概要
隣りあったの数字をたす。足した値が2桁になるときは10の位と1の位の数字をたす。1桁ならそのまま。この操作を続けていき、さいご1桁になった時、どのような数字になるかを求める。
解法
与えられう数字Sの桁は大きいので文字列として受け取る。受け取ったら、s[i]とs[i + 1]という隣あった数字を数字としてたす。その数字が10以上になった場合、1の位と10の位の数字の和になるので、now / 10 + now % 10で求める。(now/10は10の位を求め、now%10は1の位を求めている)
次に、できた数字を文字列tmpに格納していく。すべての隣り合ったものに対してこの処理を行ったら、sをtmpで更新してまた同じ処理を繰り返す。これをsが1桁になるまで繰り返せば答えになる。
ミス
なし。
コード
#include <iostream> #include <string> #include <vector> #include <cstdio> #include <algorithm> using namespace std; typedef long long ll; #define rep(i,n) for(int i=0;i<(n);i++) const int INF = 1e9; int main(void){ int t; cin >> t; for (int i = 0; i < t; ++i){ string s; cin >> s; while(s.size() != 1){ string tmp; rep(i, s.size() - 1){ int now = s[i] - '0' + s[i + 1] - '0'; int k; if(now >= 10){ k = now / 10 + now % 10; }else{ k = now; } tmp += to_string(k); } s = tmp; } cout << s << endl; } return 0; }