HolidayPlan
前言
寒假也不要颓废哦,跟着 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];
}
}
}
}