【問題】コンソールから正の整数値を入力させ続け、-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;
}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。