大整数加减乘除法还没搞定(本蒟蒻搞了一上午)233
/*
大整数加减乘除的参数均为正若需要用到负可在主函数中进行变换操作
*/
/*
大整数加减乘除的参数均为正若需要用到负可在主函数中进行变换操作
*/
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string s1, s2, s3;
int file = 0;
int P;
void Plus(string s4, string s5)
{
s3.clear();
int up = 0;
int a, b, c;
int i;
for (i = 1; i <= min(s4.size(), s5.size()); i++)
{
a = (int)(s4[s4.size() - i] - '0');
b = (int)(s5[s5.size() - i] - '0');
c = a + b + up;
up = c / 10;
c = c % 10;
s3.insert(s3.begin(), (char)(c + '0'));
}
if (up != 0)
{
if (s4.size() < s5.size())
for (i; i <= s5.size(); i++)
{
a = (int)(s5[s5.size() - i] - '0');
if (a + up < 10)
{
s5[s5.size() - i] = (char)((a + up) % 10 + '0');
break;
}
s5[s5.size() - i] = (char)((a + up) % 10 + '0');
up = (a + up) / 10;
if (i == s5.size())
{
s5.insert(s5.begin(), (char)(up + '0'));
break;
}
}
else if (s4.size() > s5.size())
{
for (i; i <= s4.size(); i++)
{
a = (int)(s4[s4.size() - i] - '0');
if (a + up < 10)
{
s4[s4.size() - i] = (char)((a + up) % 10 + '0');
break;
}
s4[s4.size() - i] = (char)((a + up) % 10 + '0');
up = (a + up) / 10;
if (i == s4.size())
{
s4.insert(s4.begin(), (char)(up + '0'));
break;
}
}
}
else
{
s4.insert(s4.begin(), (char)(up + '0'));
}
}
if (s4.size() >= s5.size())
{
s4.erase(s4.end() - s5.size(), s4.end());
s4 = s4 + s3;
s3 = s4;
}
if (s4.size() < s5.size())
{
s5.erase(s5.end() - s4.size(), s5.end());
s5 = s5 + s3;
s3 = s5;
}
}
void Reduce(string s4, string s5)
{
s3.clear();
int a, b, c;
int down = 0;
if (s4.size() > s5.size())
{
for (int i = 1; i <= s5.size(); i++)
{
a = (int)(s4[s4.size() - i] - '0');
b = (int)(s5[s5.size() - i] - '0');
if (a < b)
{
if ((int)(s4[s4.size() - i - 1] - '0') > 0)
{
s4[s4.size() - i - 1] = (char)((int)(s4[s4.size() - i - 1] - '0') - 1 + '0');
c = a + 10 - b;
s3.insert(s3.begin(), (char)(c + '0'));
}
else
{
int j = s4.size() - i - 2;
for (j; j >= 0; j--)
{
if ((int)(s4[j] - '0') > 0)
{
s4[j] = (char)((int)(s4[j] - '0') - 1 + '0');
break;
}
}
for (j = j + 1; j <= s4.size() - i - 1; j++)
s4[j] = char(9 + '0');
c = a + 10 - b;
s3.insert(s3.begin(), (char)(c + '0'));
}
}
else
{
c = a - b;
s3.insert(s3.begin(), (char)(c + '0'));
}
}
s4.erase(s4.end() - s5.size(), s4.end());
s4 = s4 + s3;
s3 = s4;
string s6;
for (int i = 0; i < s3.size(); i++)
s6 = s6 + '0';
if (s3.size() > 1 && s3 != s6)
{
int m;
for (m = 0; m < s3.size(); m++)
{
if (s3[m] != '0')
break;
}
if (m > 0)
s3.erase(s3.begin() + 1, s3.begin() + m);
}
else if (s3[0] == '0')
s3 = "0";
}
else if (s4.size() < s5.size())
{
for (int i = 1; i <= s4.size(); i++)
{
a = (int)(s5[s5.size() - i] - '0');
b = (int)(s4[s4.size() - i] - '0');
if (a < b)
{
if ((int)(s5[s5.size() - i - 1] - '0') > 0)
{
s5[s5.size() - i - 1] = (char)((int)(s5[s5.size() - i - 1] - '0') - 1 + '0');
c = a + 10 - b;
s3.insert(s3.begin(), (char)(c + '0'));
}
else
{
int j = s5.size() - i - 2;
for (j; j >= 0; j--)
{
if ((int)(s5[j] - '0') > 0)
{
s5[j] = (char)((int)(s5[j] - '0') - 1 + '0');
break;
}
}
for (j = j + 1; j <= s5.size() - i - 1; j++)
s5[j] = char(9 + '0');
c = a + 10 - b;
s3.insert(s3.begin(), (char)(c + '0'));
}
}
else
{
c = a - b;
s3.insert(s3.begin(), (char)(c + '0'));
}
}
s5.erase(s5.end() - s4.size(), s5.end());
s5 = s5 + s3;
s3 = s5;
s3.insert(s3.begin(), '-');
string s6;
for (int i = 0; i < s3.size() - 1; i++)
s6 = s6 + '0';
s6.insert(s6.begin(), '-');
if (s3.size() > 2 && s3 != s6)
{
int m;
for (m = 1; m < s3.size(); m++)
{
if (s3[m] != '0')
break;
}
if (m > 1)
s3.erase(s3.begin() + 1, s3.begin() + m);
}
else if (s3[1] == '0')
s3 = "0";
}
else if (s4.size() == s5.size())
{
if (s4 > s5)
{
for (int i = 1; i <= s5.size(); i++)
{
a = (int)(s4[s4.size() - i] - '0');
b = (int)(s5[s5.size() - i] - '0');
if (a < b)
{
if ((int)(s4[s4.size() - i - 1] - '0') > 0)
{
s4[s4.size() - i - 1] = (char)((int)(s4[s4.size() - i - 1] - '0') - 1 + '0');
c = a + 10 - b;
s3.insert(s3.begin(), (char)(c + '0'));
}
else
{
int j = s4.size() - i - 2;
for (j; j >= 0; j--)
{
if ((int)(s4[j] - '0') > 0)
{
s4[j] = (char)((int)(s4[j] - '0') - 1 + '0');
break;
}
}
for (j = j + 1; j <= s4.size() - i - 1; j++)
s4[j] = char(9 + '0');
c = a + 10 - b;
s3.insert(s3.begin(), (char)(c + '0'));
}
}
else
{
c = a - b;
s3.insert(s3.begin(), (char)(c + '0'));
}
}
string s6;
for (int i = 0; i < s3.size(); i++)
s6 = s6 + '0';
if (s3.size() > 1 && s3 != s6)
{
int m;
for (m = 0; m < s3.size(); m++)
{
if (s3[m] != '0')
break;
}
if (m > 0)
s3.erase(s3.begin() + 1, s3.begin() + m);
}
else if (s3[0] == '0')
s3 = "0";
}
if (s4 < s5)
{
for (int i = 1; i <= s4.size(); i++)
{
a = (int)(s5[s5.size() - i] - '0');
b = (int)(s4[s4.size() - i] - '0');
if (a < b)
{
if ((int)(s5[s5.size() - i - 1] - '0') > 0)
{
s5[s5.size() - i - 1] = (char)((int)(s5[s5.size() - i - 1] - '0') - 1 + '0');
c = a + 10 - b;
s3.insert(s3.begin(), (char)(c + '0'));
}
else
{
int j = s5.size() - i - 2;
for (j; j >= 0; j--)
{
if ((int)(s5[j] - '0') > 0)
{
s5[j] = (char)((int)(s5[j] - '0') - 1 + '0');
break;
}
}
for (j = j + 1; j <= s5.size() - i - 1; j++)
s5[j] = char(9 + '0');
c = a + 10 - b;
s3.insert(s3.begin(), (char)(c + '0'));
}
}
else
{
c = a - b;
s3.insert(s3.begin(), (char)(c + '0'));
}
}
s3.insert(s3.begin(), '-');
string s6;
for (int i = 0; i < s3.size() - 1; i++)
s6 = s6 + '0';
s6.insert(s6.begin(), '-');
if (s3.size() > 2 && s3 != s6)
{
int m;
for (m = 1; m < s3.size(); m++)
{
if (s3[m] != '0')
break;
}
if (m > 1)
s3.erase(s3.begin() + 1, s3.begin() + m);
}
else if (s3[1] == '0')
s3 = "0";
}
else
s3 = "0";
}
}
void Multiplication(string s4, string s5)
{
if (s4[0] == '-')
{
s1.erase(s1.begin(), s1.begin() + 1);
file++;
}
if (s5[0] == '-')
{
s2.erase(s2.begin(), s2.begin() + 1);
file++;
}
s3.clear();
int a, b, c, d;
int up = 0;
s3 = "0";
if (s4[0] == '0' || s5[0] == '0')
return;
string s6;
if (s4.size() >= s5.size())
{
for (int i = 1; i <= s5.size(); i++)
{
a = (int)(s5[s5.size() - i] - '0');
for (int j = 1; j <= s4.size(); j++)
{
b = (int)(s4[s4.size() - j] - '0');
c = a * b + up;
s6.insert(s6.begin(), (char)(c % 10 + '0'));
up = c / 10;
}
if (up != 0) {
s6.insert(s6.begin(), (char)(up + '0'));
up = 0;
}
for (int j = i - 1; j > 0; j--)
{
s6 = s6 + '0';
}
Plus(s3, s6);
s6.clear();
}
}
if (s4.size() < s5.size())
{
for (int i = 1; i <= s4.size(); i++)
{
a = (int)(s4[s4.size() - i] - '0');
for (int j = 1; j <= s5.size(); j++)
{
b = (int)(s5[s5.size() - j] - '0');
c = a * b + up;
s6.insert(s6.begin(), (char)(c % 10 + '0'));
up = c / 10;
}
if (up != 0) {
s6.insert(s6.begin(), (char)(up + '0'));
up = 0;
}
for (int j = i - 1; j > 0; j--)
{
s6 = s6 + '0';
}
Plus(s3, s6);
s6.clear();
}
}
if (file == 1)
s3.insert(s3.begin(), '-');
}
next_permutation()就是一个求一个排序的下一个排列的函数,可以遍历全排列
与之完全相反的函数还有prev_permutation(就是一个求一个排序的上一个排列的函数)
(本蒟蒻今天写火星人这道题一直以为是进制后来看到这个之后才发现是全排列)
ios::sync_with_stdio(false);关闭缓冲流能大大节省时间
改进版减法:
void Now_Reduce(string s4, string s5)
{
s3.clear();
int a, b, c;
int down = 0;
if (s4.size() > s5.size())//大于零的情况
{
for (int i = 1; i <= s5.size(); i++)
{
a = (int)(s4[s4.size() - i] - '0');
b = (int)(s5[s5.size() - i] - '0');
if (a > b)
{
c = a - b+down;
s3.insert(s3.begin(), (char)(c + '0'));
down = 0;
}
else if (a == b)
{
if (down < 0)
{
c = 9;
s3.insert(s3.begin(), (char)(c + '0'));
down = -1;
}
else
{
s3.insert(s3.begin(), '0');
}
}
else if (a < b)
{
c = a - b + 10 + down;
s3.insert(s3.begin(), (char)(c + '0'));
down = -1;
}
}
if (down != 0)
{
for (int i = s4.size() - s5.size()-1; i >= 0; i--)
{
if (s4[i] > '0')
{
s4[i] = (char)(s4[i] - 1);
down = 0;
break;
}
else
{
s4[i] = '9';
}
}
}
s4.erase(s4.end() - s5.size(), s4.end());
s4 = s4 + s3;
s3 = s4;
int m;
for (m = 0; m < s3.size(); m++)
{
if (s3[m] != '0')
break;
}
if (m > 0)
s3.erase(s3.begin(), s3.begin() + m);
}
if (s4.size() < s5.size())
{
for (int i = 1; i <= s4.size(); i++)
{
a = (int)(s5[s5.size() - i] - '0');
b = (int)(s4[s4.size() - i] - '0');
if (a > b)
{
c = a - b + down;
s3.insert(s3.begin(), (char)(c + '0'));
down = 0;
}
else if (a == b)
{
if (down < 0)
{
c = 9;
s3.insert(s3.begin(), (char)(c + '0'));
down = -1;
}
else
{
s3.insert(s3.begin(), '0');
}
}
else if (a < b)
{
c = a - b + 10 + down;
s3.insert(s3.begin(), (char)(c + '0'));
down = -1;
}
}
if (down != 0)
{
for (int i = s5.size() - s4.size() - 1; i >= 0; i--)
{
if (s5[i] > '0')
{
s5[i] = (char)(s5[i] - 1);
down = 0;
break;
}
else
{
s5[i] = '9';
}
}
}
s5.erase(s5.end() - s4.size(), s5.end());
s5 = s5 + s3;
s3 = s5;
int m;
for (m = 0; m < s3.size(); m++)
{
if (s3[m] != '0')
break;
}
if (m > 0)
s3.erase(s3.begin(), s3.begin() + m);
s3.insert(s3.begin(), '-');
}
if (s4.size() == s5.size())
{
if (s4 > s5)
{
for (int i = 1; i <= s5.size(); i++)
{
a = (int)(s4[s4.size() - i] - '0');
b = (int)(s5[s5.size() - i] - '0');
if (a > b)
{
c = a - b + down;
s3.insert(s3.begin(), (char)(c + '0'));
down = 0;
}
else if (a == b)
{
if (down < 0)
{
c = 9;
s3.insert(s3.begin(), (char)(c + '0'));
down = -1;
}
else
{
s3.insert(s3.begin(), '0');
}
}
else if (a < b)
{
c = a - b + 10 + down;
s3.insert(s3.begin(), (char)(c + '0'));
down = -1;
}
}
int m;
for (m = 0; m < s3.size(); m++)
{
if (s3[m] != '0')
break;
}
if (m > 0)
s3.erase(s3.begin(), s3.begin() + m);
}
if (s4 == s5)
s3 = "0";
if (s4 < s5)
{
for (int i = 1; i <= s4.size(); i++)
{
a = (int)(s5[s5.size() - i] - '0');
b = (int)(s4[s4.size() - i] - '0');
if (a > b)
{
c = a - b + down;
s3.insert(s3.begin(), (char)(c + '0'));
down = 0;
}
else if (a == b)
{
if (down < 0)
{
c = 9;
s3.insert(s3.begin(), (char)(c + '0'));
down = -1;
}
else
{
s3.insert(s3.begin(), '0');
}
}
else if (a < b)
{
c = a - b + 10 + down;
s3.insert(s3.begin(), (char)(c + '0'));
down = -1;
}
}
int m;
for (m = 0; m < s3.size(); m++)
{
if (s3[m] != '0')
break;
}
if (m > 0)
s3.erase(s3.begin(), s3.begin() + m);
s3.insert(s3.begin(), '-');
}
}
}
完整的大整数加减乘除:
/*
大整数加减乘除的参数均为正若需要用到负可在主函数中进行变换操作
*/
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string s1, s2, s3;
int file = 0;
void Plus(string s4, string s5)
{
s3.clear();
int up = 0;
int a, b, c;
int i;
for (i = 1; i <= min(s4.size(), s5.size()); i++)
{
a = (int)(s4[s4.size() - i] - '0');
b = (int)(s5[s5.size() - i] - '0');
c = a + b + up;
up = c / 10;
c = c % 10;
s3.insert(s3.begin(), (char)(c + '0'));
}
if (up != 0)
{
if (s4.size() < s5.size())
for (i; i <= s5.size(); i++)
{
a = (int)(s5[s5.size() - i] - '0');
if (a + up < 10)
{
s5[s5.size() - i] = (char)((a + up) % 10 + '0');
break;
}
s5[s5.size() - i] = (char)((a + up) % 10 + '0');
up = (a + up) / 10;
if (i == s5.size())
{
s5.insert(s5.begin(), (char)(up + '0'));
break;
}
}
else if (s4.size() > s5.size())
{
for (i; i <= s4.size(); i++)
{
a = (int)(s4[s4.size() - i] - '0');
if (a + up < 10)
{
s4[s4.size() - i] = (char)((a + up) % 10 + '0');
break;
}
s4[s4.size() - i] = (char)((a + up) % 10 + '0');
up = (a + up) / 10;
if (i == s4.size())
{
s4.insert(s4.begin(), (char)(up + '0'));
break;
}
}
}
else
{
s4.insert(s4.begin(), (char)(up + '0'));
}
}
if (s4.size() >= s5.size())
{
s4.erase(s4.end() - s5.size(), s4.end());
s4 = s4 + s3;
s3 = s4;
}
if (s4.size() < s5.size())
{
s5.erase(s5.end() - s4.size(), s5.end());
s5 = s5 + s3;
s3 = s5;
}
}
void Reduce(string s4, string s5)
{
s3.clear();
int a, b, c;
int down = 0;
if (s4.size() > s5.size())
{
for (int i = 1; i <= s5.size(); i++)
{
a = (int)(s4[s4.size() - i] - '0');
b = (int)(s5[s5.size() - i] - '0');
if (a < b)
{
if ((int)(s4[s4.size() - i - 1] - '0') > 0)
{
s4[s4.size() - i - 1] = (char)((int)(s4[s4.size() - i - 1] - '0') - 1 + '0');
c = a + 10 - b;
s3.insert(s3.begin(), (char)(c + '0'));
}
else
{
int j = s4.size() - i - 2;
for (j; j >= 0; j--)
{
if ((int)(s4[j] - '0') > 0)
{
s4[j] = (char)((int)(s4[j] - '0') - 1 + '0');
break;
}
}
for (j = j + 1; j <= s4.size() - i - 1; j++)
s4[j] = char(9 + '0');
c = a + 10 - b;
s3.insert(s3.begin(), (char)(c + '0'));
}
}
else
{
c = a - b;
s3.insert(s3.begin(), (char)(c + '0'));
}
}
s4.erase(s4.end() - s5.size(), s4.end());
s4 = s4 + s3;
s3 = s4;
string s6;
for (int i = 0; i < s3.size(); i++)
s6 = s6 + '0';
if (s3.size() > 1 && s3 != s6)
{
int m;
for (m = 1; m < s3.size(); m++)
{
if (s3[m] != '0')
break;
}
if (m > 1)
s3.erase(s3.begin() + 1, s3.begin() + m);
}
else if (s3[0] == '0')
s3 = "0";
}
else if (s4.size() < s5.size())
{
for (int i = 1; i <= s4.size(); i++)
{
a = (int)(s5[s5.size() - i] - '0');
b = (int)(s4[s4.size() - i] - '0');
if (a < b)
{
if ((int)(s5[s5.size() - i - 1] - '0') > 0)
{
s5[s5.size() - i - 1] = (char)((int)(s5[s5.size() - i - 1] - '0') - 1 + '0');
c = a + 10 - b;
s3.insert(s3.begin(), (char)(c + '0'));
}
else
{
int j = s5.size() - i - 2;
for (j; j >= 0; j--)
{
if ((int)(s5[j] - '0') > 0)
{
s5[j] = (char)((int)(s5[j] - '0') - 1 + '0');
break;
}
}
for (j = j + 1; j <= s5.size() - i - 1; j++)
s5[j] = char(9 + '0');
c = a + 10 - b;
s3.insert(s3.begin(), (char)(c + '0'));
}
}
else
{
c = a - b;
s3.insert(s3.begin(), (char)(c + '0'));
}
}
s5.erase(s5.end() - s4.size(), s5.end());
s5 = s5 + s3;
s3 = s5;
s3.insert(s3.begin(), '-');
string s6;
for (int i = 0; i < s3.size() - 1; i++)
s6 = s6 + '0';
s6.insert(s6.begin(), '-');
if (s3.size() > 2 && s3 != s6)
{
int m;
for (m = 1; m < s3.size(); m++)
{
if (s3[m] != '0')
break;
}
if (m > 1)
s3.erase(s3.begin() + 1, s3.begin() + m);
}
else if (s3[1] == '0')
s3 = "0";
}
else if (s4.size() == s5.size())
{
if (s4 > s5)
{
for (int i = 1; i <= s5.size(); i++)
{
a = (int)(s4[s4.size() - i] - '0');
b = (int)(s5[s5.size() - i] - '0');
if (a < b)
{
if ((int)(s4[s4.size() - i - 1] - '0') > 0)
{
s4[s4.size() - i - 1] = (char)((int)(s4[s4.size() - i - 1] - '0') - 1 + '0');
c = a + 10 - b;
s3.insert(s3.begin(), (char)(c + '0'));
}
else
{
int j = s4.size() - i - 2;
for (j; j >= 0; j--)
{
if ((int)(s4[j] - '0') > 0)
{
s4[j] = (char)((int)(s4[j] - '0') - 1 + '0');
break;
}
}
for (j = j + 1; j <= s4.size() - i - 1; j++)
s4[j] = char(9 + '0');
c = a + 10 - b;
s3.insert(s3.begin(), (char)(c + '0'));
}
}
else
{
c = a - b;
s3.insert(s3.begin(), (char)(c + '0'));
}
}
string s6;
for (int i = 0; i < s3.size(); i++)
s6 = s6 + '0';
if (s3.size() > 1 && s3 != s6)
{
int m;
for (m = 1; m < s3.size(); m++)
{
if (s3[m] != '0')
break;
}
if (m > 1)
s3.erase(s3.begin() + 1, s3.begin() + m);
}
else if (s3[0] == '0')
s3 = "0";
}
if (s4 < s5)
{
for (int i = 1; i <= s4.size(); i++)
{
a = (int)(s5[s5.size() - i] - '0');
b = (int)(s4[s4.size() - i] - '0');
if (a < b)
{
if ((int)(s5[s5.size() - i - 1] - '0') > 0)
{
s5[s5.size() - i - 1] = (char)((int)(s5[s5.size() - i - 1] - '0') - 1 + '0');
c = a + 10 - b;
s3.insert(s3.begin(), (char)(c + '0'));
}
else
{
int j = s5.size() - i - 2;
for (j; j >= 0; j--)
{
if ((int)(s5[j] - '0') > 0)
{
s5[j] = (char)((int)(s5[j] - '0') - 1 + '0');
break;
}
}
for (j = j + 1; j <= s5.size() - i - 1; j++)
s5[j] = char(9 + '0');
c = a + 10 - b;
s3.insert(s3.begin(), (char)(c + '0'));
}
}
else
{
c = a - b;
s3.insert(s3.begin(), (char)(c + '0'));
}
}
s3.insert(s3.begin(), '-');
string s6;
for (int i = 0; i < s3.size() - 1; i++)
s6 = s6 + '0';
s6.insert(s6.begin(), '-');
if (s3.size() > 2 && s3 != s6)
{
int m;
for (m = 1; m < s3.size(); m++)
{
if (s3[m] != '0')
break;
}
if (m > 1)
s3.erase(s3.begin() + 1, s3.begin() + m);
}
else if (s3[1] == '0')
s3 = "0";
}
else
s3 = "0";
}
}
void Now_Reduce(string s4, string s5)
{
s3.clear();
int a, b, c;
int down = 0;
if (s4.size() > s5.size())//大于零的情况
{
for (int i = 1; i <= s5.size(); i++)
{
a = (int)(s4[s4.size() - i] - '0');
b = (int)(s5[s5.size() - i] - '0');
if (a > b)
{
c = a - b + down;
s3.insert(s3.begin(), (char)(c + '0'));
down = 0;
}
else if (a == b)
{
if (down < 0)
{
c = 9;
s3.insert(s3.begin(), (char)(c + '0'));
down = -1;
}
else
{
s3.insert(s3.begin(), '0');
}
}
else if (a < b)
{
c = a - b + 10 + down;
s3.insert(s3.begin(), (char)(c + '0'));
down = -1;
}
}
if (down != 0)
{
for (int i = s4.size() - s5.size() - 1; i >= 0; i--)
{
if (s4[i] > '0')
{
s4[i] = (char)(s4[i] - 1);
down = 0;
break;
}
else
{
s4[i] = '9';
}
}
}
s4.erase(s4.end() - s5.size(), s4.end());
s4 = s4 + s3;
s3 = s4;
int m;
for (m = 0; m < s3.size(); m++)
{
if (s3[m] != '0')
break;
}
if (m > 0)
s3.erase(s3.begin(), s3.begin() + m);
}
if (s4.size() < s5.size())
{
for (int i = 1; i <= s4.size(); i++)
{
a = (int)(s5[s5.size() - i] - '0');
b = (int)(s4[s4.size() - i] - '0');
if (a > b)
{
c = a - b + down;
s3.insert(s3.begin(), (char)(c + '0'));
down = 0;
}
else if (a == b)
{
if (down < 0)
{
c = 9;
s3.insert(s3.begin(), (char)(c + '0'));
down = -1;
}
else
{
s3.insert(s3.begin(), '0');
}
}
else if (a < b)
{
c = a - b + 10 + down;
s3.insert(s3.begin(), (char)(c + '0'));
down = -1;
}
}
if (down != 0)
{
for (int i = s5.size() - s4.size() - 1; i >= 0; i--)
{
if (s5[i] > '0')
{
s5[i] = (char)(s5[i] - 1);
down = 0;
break;
}
else
{
s5[i] = '9';
}
}
}
s5.erase(s5.end() - s4.size(), s5.end());
s5 = s5 + s3;
s3 = s5;
int m;
for (m = 0; m < s3.size(); m++)
{
if (s3[m] != '0')
break;
}
if (m > 0)
s3.erase(s3.begin(), s3.begin() + m);
s3.insert(s3.begin(), '-');
}
if (s4.size() == s5.size())
{
if (s4 > s5)
{
for (int i = 1; i <= s5.size(); i++)
{
a = (int)(s4[s4.size() - i] - '0');
b = (int)(s5[s5.size() - i] - '0');
if (a > b)
{
c = a - b + down;
s3.insert(s3.begin(), (char)(c + '0'));
down = 0;
}
else if (a == b)
{
if (down < 0)
{
c = 9;
s3.insert(s3.begin(), (char)(c + '0'));
down = -1;
}
else
{
s3.insert(s3.begin(), '0');
}
}
else if (a < b)
{
c = a - b + 10 + down;
s3.insert(s3.begin(), (char)(c + '0'));
down = -1;
}
}
int m;
for (m = 0; m < s3.size(); m++)
{
if (s3[m] != '0')
break;
}
if (m > 0)
s3.erase(s3.begin(), s3.begin() + m);
}
if (s4 == s5)
s3 = "0";
if (s4 < s5)
{
for (int i = 1; i <= s4.size(); i++)
{
a = (int)(s5[s5.size() - i] - '0');
b = (int)(s4[s4.size() - i] - '0');
if (a > b)
{
c = a - b + down;
s3.insert(s3.begin(), (char)(c + '0'));
down = 0;
}
else if (a == b)
{
if (down < 0)
{
c = 9;
s3.insert(s3.begin(), (char)(c + '0'));
down = -1;
}
else
{
s3.insert(s3.begin(), '0');
}
}
else if (a < b)
{
c = a - b + 10 + down;
s3.insert(s3.begin(), (char)(c + '0'));
down = -1;
}
}
int m;
for (m = 0; m < s3.size(); m++)
{
if (s3[m] != '0')
break;
}
if (m > 0)
s3.erase(s3.begin(), s3.begin() + m);
s3.insert(s3.begin(), '-');
}
}
}
void Multiplication(string s4, string s5)
{
if (s4[0] == '-')
{
s1.erase(s1.begin(), s1.begin() + 1);
file++;
}
if (s5[0] == '-')
{
s2.erase(s2.begin(), s2.begin() + 1);
file++;
}
s3.clear();
int a, b, c, d;
int up = 0;
s3 = "0";
if (s4[0] == '0' || s5[0] == '0')
return;
string s6;
if (s4.size() >= s5.size())
{
for (int i = 1; i <= s5.size(); i++)
{
a = (int)(s5[s5.size() - i] - '0');
for (int j = 1; j <= s4.size(); j++)
{
b = (int)(s4[s4.size() - j] - '0');
c = a * b + up;
s6.insert(s6.begin(), (char)(c % 10 + '0'));
up = c / 10;
}
if (up != 0) {
s6.insert(s6.begin(), (char)(up + '0'));
up = 0;
}
for (int j = i - 1; j > 0; j--)
{
s6 = s6 + '0';
}
Plus(s3, s6);
s6.clear();
}
}
if (s4.size() < s5.size())
{
for (int i = 1; i <= s4.size(); i++)
{
a = (int)(s4[s4.size() - i] - '0');
for (int j = 1; j <= s5.size(); j++)
{
b = (int)(s5[s5.size() - j] - '0');
c = a * b + up;
s6.insert(s6.begin(), (char)(c % 10 + '0'));
up = c / 10;
}
if (up != 0) {
s6.insert(s6.begin(), (char)(up + '0'));
up = 0;
}
for (int j = i - 1; j > 0; j--)
{
s6 = s6 + '0';
}
Plus(s3, s6);
s6.clear();
}
}
if (file == 1)
s3.insert(s3.begin(), '-');
}
void Division(string s4, string s5)
{
int lg;
s3.clear();
if (s4.size() < s5.size())
{
s3 = "0";
return;
}
if (s4.size() == s5.size())
{
string q;
int i;
for (i = 1;; i++)
{
q = i + '0';
Multiplication(s5, q);
if (s3.size() > s4.size())
break;
else if (s3 > s4&&s3.size() == s4.size())
break;
}
s3.clear();
s3 = i - 1 + '0';
return;
}
if (s4.size() > s5.size())
{
long long r = s4.size();
string w;
while (s4.size() >= s5.size())
{
string s7;
for (int i = 0; i < s4.size(); i++)
s7 = s7 + '0';
if (s7 == s4)
break;
if (s4[0] == '0')
{
w = w + '0';
s4.erase(s4.begin(), s4.begin() + 1);
continue;
}
string s6(s4, 0, s5.size());
if (s6 >= s5)
{
if (w.size() > 0)
{
for (int j = 0; j < lg-2; j++)
w = w + '0';
}
int i = 0;
string q;
for (i = 1;; i++)
{
q = i + '0';
Multiplication(s5, q);
if (s3.size() > s6.size())
break;
else if (s3 > s6&&s3.size() == s6.size())
break;
}
w = w + (char)(i - 1 + '0');
Now_Reduce(s3, s5);
Now_Reduce(s6, s3);
if (s3 != "0")
s4.replace(s4.begin(), s4.begin() + s5.size(), s3);
else
s4.erase(s4.begin(), s4.begin() + s5.size());
lg = s5.size() - s3.size();
}
else if (s4.size() >= s5.size() + 1)
{
if (w.size() > 0)
{
for (int j = 0; j < lg-1; j++)
w = w + '0';
}
string s6(s4, 0, s5.size() + 1);
int i = 0;
string q;
for (i = 1;; i++)
{
q = i + '0';
Multiplication(s5, q);
if (s3.size() > s6.size())
break;
else if (s3 > s6&&s3.size() == s6.size())
break;
}
w = w + (char)(i - 1 + '0');
Now_Reduce(s3, s5);
Now_Reduce(s6, s3);
if (s3 != "0")
s4.replace(s4.begin(), s4.begin() + s5.size(), s3);
else
s4.erase(s4.begin(), s4.begin() + s5.size() + 1);
lg = s5.size() - s3.size();
}
else
break;
}
if (s4.size() > 0)
{
for (int j = 0; j < s4.size(); j++)
w = w + '0';
s3 = w;
return;
}
else
{
s3 = w;
return;
}
}
}