Here i have a code that translates numerical characters into roman literals, the following code works for little value smaller than 3 digits, it was supposed to work until 4 digits, when numbers are greater than 1000 it returns a segmentation fault exception. What are segmentation faults and how to avoid them
#include <unordered_map>
#include <iterator>
#include <iostream>
#include <vector>
using namespace std;
int quotient(int nominator, int denominator);
string solution(int number){
std::unordered_map<int,string> Configuration;
std::string result;
int multimes=0;
string character;
Configuration[1000]="M";
Configuration[500]="D";
Configuration[100]="C";
Configuration[50]="L";
Configuration[10]="X";
Configuration[5]="V";
Configuration[1]="I";
vector<int> NumConfig={1000,500,100,50,10,5,1};
for(vector<int>::iterator it=NumConfig.begin();it!=NumConfig.end();++it)
{
multimes=quotient(number,*it);
number-=multimes* (*it);
character=Configuration.find(*it)->second;
int var=0;
if(multimes>0 && multimes<=3 ){
while(var < multimes)
{
result.append(character);
var++;
}}
else if(multimes>3)
{
result.append(Configuration.find(*it-1)->second);
result.append(character);
}
}
return result;
}
int quotient (int nominator,int denominator)
{
int result=(int)nominator/denominator;
return result;
}
int fromint (istream &str){int x;str>>x;return x;}
int main()
{
while(true)
{
cout<<solution(fromint(cin));
}
return 0;
}