2016-01-27 3 views
0

В приведенной ниже программе я преобразую целое число в вектор, затем число проверяется на делимость на каждый элемент вектора. Однако, обращаясь к элементам вектора для проверки делимости элементов по числу, возникает ошибка времени выполнения.Ошибка выполнения при доступе к элементам векторного контейнера

#include <iostream> 
#include <algorithm> 
#include<vector> 
using namespace std; 

int main(){ 
int testcase; 
cin>>testcase; //number of testcases inputted 
while(testcase--) 
{ 
int number,i=0,count=0; 
cin >>number;    //number is inputted 
int p=number; 
vector<int> arr(100);  
while(number){   //converting integer to array 
    arr[i]=number%10; 

    number=number/10; 
    cout<<arr[i]; 
    if(p%arr[i]==0) //checking whether each element of array is divisible by number //this gives runtime error 
    count++; 
    i++; 
} 

    cout<<endl<<count<<endl; //printing the count of elemnts of array divisible by number 
    } 
return 0; 
} 

Я прокомментировал условие if, которое дает ошибку времени выполнения (без условия if, программа работает правильно). Может кто-нибудь, пожалуйста, скажите мне, как это можно исправить? Спасибо заранее.

+0

Не используйте 'std :: endl', если вам не нужен весь лишний материал, который он делает. '' \ n'' запускает новую строку. –

ответ

0

Что делать, если number % 10 == 0? Это будет означать, что arr[i] = 0 и, следовательно, выражение p%arr[i] приведет к неопределенному поведению, поскольку mod 0 является незаконным. Ваш цикл while должен выглядеть примерно так: while(number % 10).

+0

Да, это возможно. Однако я принял входные данные, которые не кратные 10, и я все еще получаю ту же ошибку. Есть ли что-то еще, что неверно? –

+0

Видеть - это верить. Давайте посмотрим на проверку того, что значение не кратно 10 или что вы не делаете мод 0 – PaulMcKenzie

+0

Спасибо большое! Я ставлю условие if, так что mod 0 не встречается. И это сделало трюк :) Спасибо Jamey D и PaulMcKenzie –

1

В этом состоянии

if(p%arr[i]==0) 

arr[i] может быть равна 0.

Таким образом, если число содержит 0, программа сработает.

+0

Как-то я забыл, что мод 0 является незаконным. Большое спасибо. Ваше предложение мне очень помогло :) –

Смежные вопросы