Я работаю над разделением больших чисел, которые представлены в виде строк. Но когда цифры большие, я получаю такое сообщение: kill signal (SIGKILL). Кто-нибудь может мне помочь?
bool compare(string m, string n) { if(m.length()>n.length()) return true; else if(m.length()<n.length()) return false; for(int i=0;i<m.length();i++) { if((m[i]-'0')>(n[i]-'0')) return true; if((m[i]-'0')<(n[i]-'0')) return false; } } string substract(string str1, string str2) { string str = ""; int n1 = str1.length(), n2 = str2.length(); int m=n1-n2; for(int i=0;i<m;i++) str2="0"+str2; reverse(str1.begin(), str1.end()); reverse(str2.begin(), str2.end()); n2 = str2.length(); int carry = 0; for (int i=0; i<n2; i++) { int sub = ((str1[i]-'0')-(str2[i]-'0')-carry); if (sub < 0) { sub = sub + 10; carry = 1; } else carry = 0; str.push_back(sub + '0'); } for (int i=n2; i<n1; i++) { int sub = ((str1[i]-'0') - carry); carry = 0; str.push_back(sub + '0'); } reverse(str.begin(), str.end()); if(str.length()>1) { int i = 0; while (str[i] == '0') i++; str.erase(0, i); } return str; } string sum(string a, string b) { if(a.size() < b.size()) swap(a, b); int j = a.size()-1; for(int i=b.size()-1; i>=0; i--, j--) a[j]+=(b[i]-'0'); for(int i=a.size()-1; i>0; i--) { if(a[i] > '9') { int d = a[i]-'0'; a[i-1] = ((a[i-1]-'0') + d/10) + '0'; a[i] = (d%10)+'0'; } } if(a[0] > '9') { string k; k+=a[0]; a[0] = ((a[0]-'0')%10)+'0'; k[0] = ((k[0]-'0')/10)+'0'; a = k+a; } return a; } string division(string a, string b) { bool p; bool t=compare(a,b); string ans; if(t==true) p=true; while(p==true) { a=substract(a,b); ans=sum(ans,"1"); t=compare(a,b); if(t==false) p=false; } return ans; }
Что я уже пробовал:
Я написал код,который использует функции сравнения, вычитания и суммы для деления.
Patrice T
Дайте рабочий код и данные, которые показывают ошибку.