Today I wrote some interesting code that convert an integer to Roman numerals. Whole running codes are here:
#include <iostream>
#include <map>
#include <string>
using namespace std;
string arabic2roman(int i){
//if(i==0) return "ZERO";
map<int, string> m;
m.insert(pair<int,string>(0,"ZERO"));
m.insert(pair<int,string>(1,"I"));
m.insert(pair<int,string>(4,"IV"));
m.insert(pair<int,string>(5,"V"));
m.insert(pair<int,string>(9,"IX"));
m.insert(pair<int,string>(10,"X"));
m.insert(pair<int,string>(40,"XL"));
m.insert(pair<int,string>(50,"L"));
m.insert(pair<int,string>(90,"XC"));
m.insert(pair<int,string>(100,"C"));
m.insert(pair<int,string>(400,"CD"));
m.insert(pair<int,string>(500,"D"));
m.insert(pair<int,string>(900,"CM"));
m.insert(pair<int,string>(1000,"M"));
string roman;
map<int,string>::iterator iter;
for(iter=m.end();iter !=m.begin();iter--){
while(i >=iter->first){
roman+=iter->second;
i-=iter->first;
}
}
return roman;
}
int main(){
int test=12345;
cout << arabic2roman(test) << endl;
return 0;
}
This code works fine on my Xcode 4.6.2 right now. But if remove "//" in line 8 right before if(i==0) return "ZERO", on Xcode 4.6.2, the program runs endlessly. Can anybody explain this? Thanks!