下面是我写的1813题的代码,提交结果总是Wrong answer,却怎么也找不错来。请各位帮忙。
中大sicily第1813题题目在http://soj.me/show_problem.php?pid=1813&cid=
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int mi(int base,int pow);//幂函数
int ctoi(char c);
class Digit
{
public:
Digit(int base,string s);//用已有的该进制数创建对象
Digit(int base,int dv);//用十进制数dv创建对象
int dv();//该进制数的十进制表示
Digit operator/(Digit &secondDigit);
Digit operator%(Digit &secondDigit);
string factor;//所有系数组成的字符串
private:
int base;//基数
int msb;//数位数
};
Digit::Digit(int base,string s)
{
this->base=base;
this->msb=s.length();
this->factor=s;
}
Digit::Digit(int base, int dv)
{
this->base=base;
if(dv==0)
{
factor="0";
this->msb=1;
}
else if(dv>0)
{
char fa[40];
for(msb=0;dv!=0;msb++)
{
int f=dv/base;
int r=dv%base;//系数
if(r>=0&&r<=9)
{
fa[msb]=r+48;
}
else if((r>9)&&(r<35))
{
fa[msb]=r+55;
}
else
{
cout<<"本程序不支持此进制数!"<<endl;
break;
}//1-16 Only
dv=f;
}
for(int i=msb-1;i>=0;i--)
{
factor+=fa[i];
}
}
else if(dv<0)
{
char fa[40];
fa[0]='-';
dv=-dv;
for(msb=1;dv!=0;msb++)
{
int f=dv/base;
int r=dv%base;
if(r>=0&&r<=9)
{
fa[msb]=r+48;
}
else if((r>9)&&(r<35))
{
fa[msb]=r+55;
}
else
{
cout<<"本程序不支持此进制数!"<<endl;
break;
}
dv=f;
}
for(int i=msb-1;i>0;i--)
{
factor+=fa[i];
}
factor.insert(0,1,'-');
}
}
int Digit::dv()
{
int dv=0;
if(factor[0]=='-')
{
for(int i=1;i<msb;i++)
dv+=(ctoi(factor[i]))*mi(base,(msb-i-1));//^!!!!!!!!!!
dv=-dv;
}
else
{
for(int i=0;i<msb;i++)
dv+=(ctoi(factor[i]))*mi(base,(msb-i-1));
}
return dv;
}
Digit Digit::operator/(Digit &secondDigit)
{
int q=(dv()/secondDigit.dv());
return Digit(base,q);
}
Digit Digit::operator%(Digit &secondDigit)
{
int r=(dv()%secondDigit.dv());
return Digit(base,r);
}
int ctoi(char c)
{
int integer;
//char array[1];
//array[0]=c;
if(c>47&&c<58)integer=c-48;
else if((c>64)&&(c<91))integer=c-55;
return (integer);
}
int mi(int base,int pow)
{
int res=1;//result
for ( int cnt=1; cnt<= pow; cnt++)
res = res * base;
return res;
}
int main()
{
int num;
cin>>num;
for(int i=0;i<num;i++)
{
int base;
cin>>base;
string A,B;
cin>>A>>B;
Digit a(base,A);
Digit b(base,B);
string d1=(a/b).factor;
string d2=(a%b).factor;
cout<<d1<<endl;
cout<<d2<<endl;
}
return 0;
}