记录编号 57894 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [東方S1] 西行寺幽幽子 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 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;
}