做了天梯的加减乘然后又把除法找出来做了下 利用减法做除法 所以先要保证减法写的是对的 这次直接写减法 比上次速度提高了 而且竟然一次写对了。
之前做过加减乘除 除法就没有参考资料了 自己独立写的 最终也写出来了。
#include <iostream>
#include <string>
#include<algorithm>
#include<cstring>
using namespace std;
string sub(const string &a_, const string &b_)
{
int *tem;
char *re;
string result,a,b;
bool flag = true;
unsigned i,j;
if(a_ == b_)return "0";
a = a_;
b=b_;
if(a.length() < b.length())flag = false,swap(a,b);
else if(a.length() == b.length() && a < b)flag = false,swap(a,b);
tem = new int[a.length()];
re = new char[a.length() + 2];
memset(tem,0,(a.length()) * sizeof(int));
memset(re,'\0',(a.length() + 2) * sizeof(char));
for(i = 0,j = 0; i < a.length(); ++i)
{
if(i < a.length() - b.length())tem[i] = a[i] -'0';
else
{
tem[i] = a[i] - b[j];
++j;
}
}
for(i = a.length() - 1; i > 0; --i)
{
if(tem[i] < 0)
{
tem[i-1] -= 1;
tem[i] += 10;
}
}
j = 0;
while(tem[j] == 0)++j;
if(flag)
{
for(i = j; i < a.length(); ++i)re[i-j] =tem[i] + '0';
re[i-j] = '\0';
}
else
{
re[0] = '-';
for(i = j; i < a.length(); ++i)re[i-j+1] = tem[i] + '0';
re[i-j+1] = '\0';
}
result = re;
delete []re;
delete []tem;
return result;
}
string div(const string &a_, const string &b_)
{
if(a_ == b_)return "1";
else if(a_.length() == b_.length() && a_ < b_)return "0";
else if(a_.length() < b_.length())return "0";
else if(b_ == "1")return "a_";
else if(b_ == "0")return "error!";
char *re;
string result,a,b;
a = a_;
b = b_;
re = new char[a.length() - b.length() + 2];
memset(re,'\0',(a.length() - b.length() + 2) * sizeof(char));
int sub_len = a.length() - b.length();
int i,j = 0,re_tem = -1;
string test,a_tem;
while(1)
{
b = b_;
for(i = 0; i < sub_len; i++)b += "0";
//cout<<b<<endl;
while(1)
{
a_tem = a;
// cout<<"a0 = "<<a<<endl;
a = sub(a,b);
// cout<<"a = "<<a<<endl;
++re_tem;
if(a[0] == '-')
{
re[j] =re_tem + '0';
++j;
re_tem = -1;
--sub_len;
a = a_tem;
//cout<<"a2 = "<<a<<endl;
break;
}
}
test = sub(a,b_);
if(test[0] == '-' || a == "0")break;
}
re[j] = '\0';
unsigned m,k = 0;
while(re[k] == '0')++k;//写成re[k] == 0 检查半天才发现。。
for(m = k;m < a_.length() - b_.length() + 2;++m) re[m-k] = re[m];
//这里写成m < a.length() - b.length() + 2 也检查了半天 囧
result = re;
delete []re;
return result;
}
int main()
{
string a,b;
cin>>a>>b;
cout<<div(a,b);
return 0;
}