Why is my program causing SIGABRT error?
#define MOD 1000000007
#define N 100001
# define INT_MAX 9223372036854775807
# define INT_MIN -922337203654775808
using namespace std;
typedef long long int lli;
lli power(lli a,lli b){
if(b==0){
return 1;
}
lli temp=power(a,b/2);
if(b%2==0){
return temp*temp;
}
else{
return a*temp*temp;
}
}
lli actual(string str){
lli num=0;
lli ten=1;
lli n=str.size();
for(lli i=0;i<n;i++){
num=num+(str[i]-'0')*ten;
ten=ten*10;
}
return num;
}
lli required(lli n,lli times){
while(times!=0 && n!=0){
n=n/10;
times--;
}
return n;
}
lli gcd(lli num,lli den){
if(den==0){
return num;
}
return gcd(den,num%den);
}
bool comp(pair<lli,lli> a,pair<lli,lli> b){
return a.second<=b.second;
}
vector<pair<lli,lli>>ans;
int main(){
long long int t,i,j;
ios_base::sync_with_stdio(false);
cin.tie(NULL);
while(true){
ans.clear();
string x;
cin>>x;
if(x=="0"){
break;
}
string fraction="";
for(lli i=2;x[i]!='.';i++){
fraction=fraction+x[i];
}
//cout<<"fraction "<<fraction<<endl;
lli n=fraction.size();
lli ten_n=power(10,n);
// cout<<"actual power "<<ten_n<<endl;
// cout<<"n "<<n<<endl;
string fraction_rev=fraction;
reverse(fraction_rev.begin(),fraction_rev.end());
lli actual_no=actual(fraction_rev);
// cout<<"actual number "<<actual_no<<endl;
fraction=' '+fraction;
for(lli i=1;i<=n;i++){
lli ten_i=power(10,n-i);
// cout<<"required power "<<ten_i<<endl;
lli required_no=required(actual_no,i);
// cout<<"required number "<<required_no<<" required power "<<ten_i<<endl;
lli num=actual_no-required_no;
lli den=ten_n-ten_i;
// cout<<"num "<<num<<endl;
lli gcd_no=gcd(num,den);
ans.push_back(make_pair(num/gcd_no,den/gcd_no));
}
sort(ans.begin(),ans.end(),comp);
cout<<ans[0].first<<"/"<<ans[0].second<<endl;
}
return 0;
}