質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
C++

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

Q&A

解決済

1回答

940閲覧

1の位が同じものをvectorでまとめて表示する

sattsun

総合スコア25

C++

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

0グッド

0クリップ

投稿2020/03/07 23:14

【問題】コンソールから正の整数値を入力させ続け、-1を入力すると、それまで入力した整数の一の位が同じものをまとめて表示するプログラムを作りなさい。このとき、入力された整数値は、vectorで作った可変長配列の中に格納すること。
【答え】
正の整数を入力:1
正の整数を入力:12
正の整数を入力:20
正の整数を入力:-1
一の位が0:20
一の位が1:1
一の位が2:12
一の位が3:なし
一の位が4:なし
一の位が5:なし
一の位が6:なし
一の位が7:なし
一の位が8:なし
一の位が9:なし

以下のコードのように考えました。
しかし、2.を10未満と限定してしまっているので、限定しないように変えたいです。
どうすればいいか分かりません。

#include <vector>
using namespace std;
int main() {
vector<int> v1;
int n = 0;
while (n != -1)
{
cout << "正の整数を入力:";
cin >> n;
v1.push_back(n);
}

for (int value = 0; value < 10; value++) { cout << "一の位が"<<value<<":"; unsigned int i; int m1 = 0, digit1 = 0, cnt1 = 0, square1; //1.整数の入力値分だけ回す for (i = 0; i < v1.size(); i++) { //2.10の0から10乗分回すことになっているが限定したくない。今10乗までに限定している。 for (m1 = 0; m1 < 10; m1++) { //整数の入力値10以上の時は10の0乗をやりたくない if (m1 == 0 && v1[i] >= 10) { m1++; } //10のm1乗 square1 = pow(10, m1); //3.整数を10の0乗で割った余りが0 else if ((value == 0 && v1[i]>=10) && (v1[i] % square1) == value) { cout << v1[i] << " "; //4.一の位がvalueの時カウントする cnt1 = 1; break; } //3.整数を10の0乗以外で割った余りがvalue else if ((value !=0)&& (v1[i] % square1) == value) { cout << v1[i] << " "; //4.一の位がvalueの時カウントする cnt1 = 1; break; } //5.整数を10のm乗で割った数が1未満な次の整数の入力値移動 else if ((v1[i] / square1) < 1) { //cout << endl; break; } } //6.最後の整数の入力値でかつ一の位が1の時カウントが0 if (i == (v1.size() - 1) && cnt1 == 0) { cout << "なし" ; } } cout << endl; } return 0;

}

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

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

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

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

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

guest

回答1

0

ベストアンサー

註: 直接的な回答ではありません

単に1の位の値を知りたいだけなら v1[i] % 10 で充分では無いでしょうか。

C++

1for(int value = 0; value < 10; value++) 2{ 3 cout << "一の位が"<<value<<":"; 4 for (i = 0; i < v1.size(); i++) 5 { 6 if(v1[i] % 10 == value) 7 { 8 ... 9 } 10 ... 11 } 12 ... 13}

また、vectorを巡回する際には範囲for文が便利です。

コードの貼り方について

teratailには、コードを見やすく表示する機能があります。
質問編集画面を開き、コードを選択した状態で<code>ボタンを押して下さい。
C++

投稿2020/03/07 23:41

LouiS0616

総合スコア35660

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問