提交记录 9337


用户 题目 状态 得分 用时 内存 语言 代码长度
oscar_test 1005a. 【模板题】高精度除法 Time Limit Exceeded 0 1 s 192 KB C++ 2.66 KB
提交时间 评测时间
2019-05-01 16:39:42 2020-08-01 01:36:48
#include<iostream>
#include<algorithm>
using namespace std;


string lAdd(const string& ina,const string& inb){
	string a=ina,b=inb;
	
	while(a.size()!=b.size())
		a.size()>b.size() ? b.insert(b.begin(),'0') : a.insert(a.begin(),'0');
	
	string ans;
	int sum,num,app=0;
	
	for(int i=a.size()-1;i>=0;i--){
		sum=a[i]-'0'+b[i]-'0'+app;
		num=sum%10;
		ans.push_back('0'+num);
		app=sum/10;
	}
	
	if(app) ans.push_back('0'+app);
	
	int r=ans.size();
	while(--r>0&&ans[r]=='0') ans.pop_back();
	
	reverse(ans.begin(),ans.end());
	
	return ans;
}


//must fulfil ina >= inb, otherwise "Error" pop out

string lSub(const string& ina,const string& inb){
	string a=ina,b=inb;
	
	while(a.size()!=b.size())
		a.size()>b.size() ? b.insert(b.begin(),'0') : a.insert(a.begin(),'0');
	
	string ans;
	int sub,num,app=0;
	
	for(int i=a.size()-1;i>=0;i--){
		sub=a[i]-b[i]-app;
		num=(10+sub)%10;
		ans.push_back('0'+num);
		app= sub<0 ? 1 : 0;
	}
	
	if(app) cout<<"Error in lSub: ina < inb !"<<endl;
	
	int r=ans.size();
	while(--r>0&&ans[r]=='0') ans.pop_back();
	
	reverse(ans.begin(),ans.end());
	
	return ans;
}


//To implement lMul: lAdd is reused

string lMul(const string& ina,const string& inb){
	string b=inb,ans;
	
	for(int i=ina.size()-1;i>=0;i--){
		string rans;
		int pro,num,app=0;
		
		for(int j=b.size()-1;j>=0;j--){
			pro=(b[j]-'0')*(ina[i]-'0')+app;
			num=pro%10;
			rans.push_back('0'+num);
			app=pro/10;
		}
		
		if(app) rans.push_back('0'+app);
		
		int r=rans.size();
		while(--r>0&&rans[r]=='0') rans.pop_back();
		
		reverse(rans.begin(),rans.end());
		
		ans=lAdd(ans,rans);
		b.push_back('0');
	}
	
	return ans;
}


//postive: ina > inb, zero: ina == inb, negative: ina < inb

int lCmp(const string& ina,const string& inb){
	int i=0,j=0;
	while(i<ina.size()-1&&ina[i]=='0') i++;
	while(j<inb.size()-1&&inb[j]=='0') j++;
	string a=ina.substr(i),b=inb.substr(j);
	
	if(a.size()==b.size()) return a.compare(b);
	return a.size()-b.size();
}


//To implement lDiv: lAdd, lSub, lMul and lCmp are reused
//Cannot be divided by zero

string lDiv(const string& ina,const string& inb){
	int i=0,j=0;
	while(i<ina.size()-1&&ina[i]=='0') i++;
	while(j<inb.size()-1&&inb[j]=='0') j++;
	string a=ina.substr(i),b=inb.substr(j);
	
	string ans="0";
	
	while(lCmp(a,b)>=0){
		
		int inc=0;
		while(a.size()!=b.size()){
			b.push_back('0');
			inc++;
		}
		
		if(a.compare(b)<0){
			b.pop_back();
			inc--;
		}
		
		int div=2;
		while(lCmp(a,lMul(to_string(div),b))>=0) div++;
		div--;
		
		a=lSub(a,lMul(to_string(div),b));
		
		b.erase(b.end()-inc,b.end());
		
		string rans(inc+1,'0');
		rans[0]='0'+div;
		
		ans=lAdd(ans,rans);
	}
	
	return ans;
}


int main(){
	
	string a,b;
cin>>a>>b;
cout<<lDiv(a,b)<<endl;
	
	return 0;
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #11 s192 KBTime Limit ExceededScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2026-04-04 11:52:48 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠