记录编号 |
57894 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
[東方S1] 西行寺幽幽子 |
最终得分 |
100 |
用户昵称 |
cstdio |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.074 s |
提交时间 |
2013-04-14 11:46:38 |
内存使用 |
0.33 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<cstring>
#include<cmath>
using namespace std;
//注意:先预处理a,b,c的s和l
const int SIZE=29999;
class HP{
public:
char s[SIZE];//数
int l;//长度,不是指针
string str;
void turnint(void){
int i;
for(i=0;i<l;i++) s[i]-='0';
}
void turnchar(void){
int i;
for(i=0;i<l;i++) s[i]+='0';
}
void clear(void){
int i;
for(i=0;i<SIZE;i++) s[i]=0;
l=0;
}
void haneg(void){
int i=0,j=l-1,temp;
while(i<=j) temp=s[i],s[i]=s[j],s[j]=temp,i++,j--;
}
void input(void){
clear();
cin>>s;
l=strlen(s);
haneg(),turnint();
}
void output(void){
haneg(),turnchar();
cout<<s<<endl;
}
void outint(void){//调代码用蛤蛤蛤
int i;
for(i=l-1;i>=0;i--) cout<<(int)s[i];
cout<<endl;
}
};
bool operator >= (HP a,HP b){//输出a>=b
if(a.l!=b.l) return a.l>b.l;
int i=a.l-1;
while(i>=0&&a.s[i]==b.s[i]) i--;
return i==-1||a.s[i]>=b.s[i];
}
HP operator << (HP a,int x){//a*10^x,不是正常的2,另外是扩大不是缩小
if(!x) return a;
int i;
for(i=a.l-1;i>=0;i--) a.s[i+x]=a.s[i],a.s[i]=0;
a.l+=x;
return a;
}
HP operator >> (HP a,int x){//a/(10^x),类似<<
if(!x) return a;
int i;
for(i=x;i<a.l;i++) a.s[i-x]=a.s[i],a.s[i]=0;
a.l-=x;
return a;
}
HP operator - (HP a,HP b){//b是减数,并且限定a>=b
int i;
for(i=0;i<a.l;i++){
if(a.s[i]>=b.s[i]) a.s[i]-=b.s[i];
else a.s[i]=a.s[i]+10-b.s[i],a.s[i+1]--;
}
while(a.s[a.l-1]==0) a.l--;
if(a.l==0) a.l++;
return a;
}
HP operator / (HP a,HP b){//注意:结果是从高位到低位的('正序')
HP x,orib;
x.clear();
x.l=1;//相当于x=0
orib=b;
int sum=a.l>b.l?a.l-b.l:0;
b=b<<(sum);
while(a>=orib){
while(a>=b){
x.s[x.l-1]++;
a=a-b;
}
b=b>>1;
sum--;
x.l++;
}
x.l+=sum;
while(!x.s[0]) x=x>>1;
return x;
}
int main(){
freopen("spring.in","r",stdin);
freopen("spring.out","w",stdout);
HP a,b;
a.input(),b.input();
HP ans=a/b;
ans.haneg();
ans.output();
return 0;
}