HolidayPlan

LightDirection / 2024-02-01 / 原文

前言

寒假也不要颓废哦,跟着 LightDirection 一起学习吧!

Day1

复习高精度。

luogu p1601

#include<iostream>
std::string a,b;
int toNum(char ch){
	return int(ch-48);
}
void zero(){
	if(a.size()>b.size()){
		int temp=a.size()-b.size();
		for(int i=1;i<=temp;i++){
			b.insert(0,"0");
		} 
	}else if(a.size()<b.size()){
		int temp=b.size()-a.size();
		for(int i=1;i<=temp;i++){
			a.insert(0,"0");
		} 
	}
}
void calc(){
	std::string res;
	int last=0;
	for(int i=a.size()-1;i>=0;i--){
		int temp=toNum(a[i])+toNum(b[i]);
		temp+=last;
		int tar=temp-temp%10;
		res.insert(0,std::to_string(temp%10));
		tar/=10;
		last=tar;
	}
	if(last!=0){
		res.insert(0,std::to_string(last));
	}
	std::cout<<res;
}
int main(){
	std::cin>>a>>b;
	zero();
	calc();
}

luogu p2142

#include<iostream>
#include<cmath> 
bool hasSigned=false;
std::string a,b;
int toNum(char ch){
	return int(ch-48);
}
void zero(){
	if(a.size()>b.size()){
		int temp=a.size()-b.size();
		for(int i=1;i<=temp;i++){
			b.insert(0,"0");
		}
	}else if(a.size()<b.size()){
		int temp=b.size()-a.size();
		for(int i=1;i<=temp;i++){
			a.insert(0,"0");
		}
	}
	if(a<b){
		hasSigned=true;
		//交换两个字符串 
		std::string copy=a;
		std::string copy2=b;
		a=copy2,b=copy;
	}
}
void calc(){
	std::string res;
	int last=0;
	for(int i=a.size()-1;i>=0;i--){
		int NumA=toNum(a[i]);
		int NumB=toNum(b[i]);
		if(NumA<NumB){//a本身就小于b 
			int temp=NumA+10-NumB-last;
			if(last==0){
				last++;
			}
			res.insert(0,std::to_string(temp));
		}else if(NumA==NumB){
			if(!last){
				res.insert(0,"0");
				continue;
			}else{
				res.insert(0,"9");
				continue;
			}
		}else if(NumA>NumB){
			int temp=NumA-NumB-last;
			last=0;
			res.insert(0,std::to_string(temp));
		}
	}
	while(res[0]=='0' and res.size()>1){
		res.erase(0,1);
	}
	if(hasSigned){
		res.insert(0,"-");
	} 
	std::cout<<res; 
} 
int main(){
	std::cin>>a>>b;
	zero();
	calc();
} 

luogu p1303

#include<iostream>
#include<vector>
std::string a,b;
int toNum(char ch){
	return int(ch-48);
}
int zerocnt;
void zero(){
	for(int i=a.size()-1;i>=0;i--){
		if(a[i]!='0'){
			break;
		}else{
			zerocnt++;
		}
	}
	for(int i=1;i<=zerocnt;i++){
		a.erase(a.end()-1);
	}
	int temp=zerocnt;
	for(int i=b.size()-1;i>=0;i--){
		if(b[i]!='0'){
			break;
		}else{
			zerocnt++;
		}
	}
	for(int i=1;i<=zerocnt-temp;i++){
		b.erase(b.end()-1);
	}
}
void calc(){
	std::vector<int>resTemp(a.size()+b.size(),0);
	for(int i=a.size()-1;i>=0;i--){
		for(int j=b.size()-1;j>=0;j--){
			int NumA=toNum(a[i]);
			int NumB=toNum(b[j]);
			int temp=NumA*NumB;
			int distA=i+j;
			int distB=i+j+1;
			int ans=temp+resTemp[distB];
			resTemp[distA]+=(ans/10);
			resTemp[distB]=(ans%10);
		}
	}
	std::string res;
	for(auto i:resTemp){
		//去除前导0 
		if(!res.size() and i==0){
			continue;
		}
		res+=std::to_string(i);
	}
	if(res.size()==0){
		std::cout<<"0";
	}else{
		for(int i=0;i<zerocnt;i++){
			res+="0";
		}
		std::cout<<res;
	}
}
int main(){
	std::cin>>a>>b;
	zero();
	calc();
}

luogu p1480

#include<iostream>
#define int long long
int toNum(char ch){return signed(ch-48);}
char toChar(int x){return char(x+48);}
std::string a;
int b[10005],c,x,idx;
signed main(){
	std::cin>>a>>c;
	if(a=="0"){
		std::cout<<"0";
		return 0;
	}else{
		for(int i=0;i<a.size();i++){
			x=x*10+toNum(a[i]);
			b[i]=x/c;
			x%=c;
		}
		for(int i=0;i<a.size();i++){
			if(b[i]){
				idx=i;
				break;
			}
		}
		if(idx==a.size()){
			std::cout<<0;
		}else{
			for(int i=idx;i<a.size();i++){
				std::cout<<b[i]; 
			}
		}
	}
}