🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

997閲覧

Atcoder 部分和問題

kenken83738

総合スコア13

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/12/07 08:03

編集2020/12/07 08:06

Atcoderの部分和問題ですが一部分どのような処理が行われているのかわかりません。
Bit全探索で解こうと思っているのですが**tmp += s[i] - '0';'0'**はどういった処理をしているのでしょうか?

C++

1#include <bits/stdc++.h> 2#define rep(i, n) for (int i = 0; i < (int)(n); i++) 3using namespace std; 4using ll = long long; 5// using P = pair<int, int>; 6 7int main() { 8 string s; 9 cin >> s; 10 int n = s.size(); //nはsの文字数が入っている 11 ll res = 0; 12 13 for(int bit = 0; bit < (1<<(n-1)); bit++){ 14 ll tmp = 0; 15 for(int i = 0; i < n-1; i++){ 16 tmp *= 10; 17 tmp += s[i] - '0'; 18 if(bit & (1<<i)){ 19 res += tmp; 20 tmp = 0; 21 } 22 } 23 tmp *= 10; 24 tmp += s.back() - '0'; 25 res += tmp; 26 } 27 cout << res << endl; 28}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

tmp += s[i] - '0';の'0'はどういった処理をしているのでしょうか?

s[i] - '0' が、数(たとえば'5') を 数(たとえば5) に変換しています。

投稿2020/12/07 08:36

編集2020/12/07 13:24
episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kenken83738

2020/12/07 16:16

回答ありがとうございます。 数値に変換されるのですね。 問題にもありますが入力が125として、for文のi=0のときtmp += s[i]のs[i]には文字の1が入り、 tmp += char(1) - '0'となると思います。その時tmpに入るのが数値の1になるということでよろしいでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問