It's WA all the time, I have checked over function div, function division and functon mod, I think they are all right, please help me, thanks in advance !
#include <iostream>
#include <string>
#include <fstream>
#include <deque>
//#define LOCAL
#define fin cin
#define fout cout
using namespace std;
#ifdef LOCAL
ifstream fin("in.cpp");
ofstream fout("out.cpp");
#endif
void division(const deque<int> &a, const unsigned &n, deque<int> &result)
{
deque<int>::size_type i = 0;
deque<int> s(a);
unsigned sum1 = 0, sum2 = 0, sum3 = 0;
if ( !s.empty()) {
sum1 = s.front();
sum2 = sum1 / n;
sum3 = sum1 % n;
while (!s.empty() && sum2 == 0 )
{
s.pop_front();
if(!s.empty())
result.push_back(0);
if (!s.empty()) {
s.front() = (sum1 * 10 + s.front());
sum1 = s.front();
sum2 = sum1 / n;
sum3 = sum1 % n; }
}
if (!s.empty())
s.pop_front();
if (!s.empty())
s.front() = sum3 * 10 + s.front();
result.push_back(sum2);
while (result.size() - 1 != 0 &&result.front() == 0)
result.pop_front();
division(s,n,result);
}
}
void div(const string &a, const unsigned &n, string &result)
{
deque<int> v,r;
result.clear();
string::const_iterator iter = a.begin();
while (iter != a.end())
{
v.push_back(*iter - '0');
++iter;
}
division( v, n, r);
deque<int>::const_iterator it = r.begin();
while (it != r.end())
{
result.push_back(*it + '0');
++it;
}
}
void mod(const string &a, const unsigned &n, unsigned &result)
{
string::size_type i = a.size();
string s(a);
result = 0;
unsigned sum1, sum2, sum3,d;
if (!s.empty()) {
sum1 = s.at(i - 1) - '0';
sum2 = sum1 % n;
sum3 = 10 % n;
s.erase(s.end() - 1);
mod( s, n, d);
result = (sum2 + sum3*d) % n;
}
}
int main()
{
string a, result_str;
char mark;
unsigned n, result_int;
while (fin >> a >> mark >> n)
{
if (mark == '/') {
div( a, n, result_str);
fout << result_str << endl;
result_str.clear();
}
else {
mod( a, n, result_int);
fout << result_int << endl;
}
}
return 0;
}
