- 2022tysc0819 的博客
主页/C++
- 2023-10-19 11:46:12 @
章
高精度模板
#include<bits/stdc++.h>
using namespace std;
//#define int long long
//#pragma GCC optimize(2,3,"Ofast","inline")
const int N=1e6+10,M=1010,P=1e9+7,MOD=998244353,PI=3.1415926;
const int MAXN=1e5+10;
struct HA{
int v[MAXN]={0};
int len=0;
//读入高精度
void read(){string s;cin>>s;if(s=="0")return;len=s.length();for(int i=1;i<=len;i++)v[i]=s[len-i]-'0';}
//输出高精度
void print(){if(len==0)printf("0");for(int i=len;i>=1;i--)printf("%d",v[i]);}
//拷贝高精度
HA cpy()const{HA b;b.len=len;for(int i=1;i<=len;i++)b.v[i]=v[i];return b;}
//将单精度的值赋给高精度
void get(const int &k){len=0;int t=k;while(t>0){len++;v[len]=t%10;t/=10;}}
//高精度ADD加法
HA operator+(const HA &b)const{
HA c;c.len=max(len, b.len);
for(int i=1;i<=c.len;i++){c.v[i]+=v[i]+b.v[i];c.v[i+1]+=c.v[i]/10;c.v[i]%=10;if(c.v[c.len+1]>0)c.len++;}
return c;//返回答案
}
//高精度SUB减法
HA operator-(const HA &b)const{
HA c;c.len=len;
for(int i=1;i<=c.len;i++){c.v[i]+=v[i]-b.v[i]+10;c.v[i+1]+=c.v[i]/10-1;c.v[i]%=10;}
while(c.len>0&&c.v[c.len]==0)c.len--;//退位
return c;
}
//高精度MUL乘法
HA operator*(const HA &b)const{
HA c;if(len==0||b.len==0)return c;//特判乘0
for(int i=1;i<=len;i++)for(int j=1;j<=b.len;j++){c.v[i+j-1]+=v[i]*b.v[j];c.v[i+j]+=c.v[i+j-1]/10;c.v[i+j-1]%=10;}
c.len=len+b.len-1;
while(c.v[c.len+1]>0){c.len++;c.v[c.len+1]+=c.v[c.len]/10;c.v[c.len]%=10;}//删除0
return c;
}
//高精度DIV除法 高精度除高精度
HA operator/(const HA &b)const{
HA c;HA rem;
for(int i=len;i>=1;i--){
rem=rem*10+v[i];
//rem/b使用while->减法实现
while (rem>=b){rem=rem-b;c.v[i]++;}
if(c.v[i]>0&&c.len==0)c.len=i;//找到最高位
}
return c;
}
//高精度MOD取余
HA operator %(const HA &b)const{HA c=this->cpy();return (c-((c/b)*b));}
//高精度加低精度
HA operator+(const int &k)const{
HA c;int t=k;c.len=len;
if(c.len==0&&k>0)c.len=1;//特判初始为0的高精度
for(int i=1;i<=c.len;i++){c.v[i]+=v[i]+t%10;t/=10;c.v[i+1]+=c.v[i]/10;c.v[i]%=10;if(c.v[c.len+1]>0||(i==c.len&&t>0))c.len++;}
return c;
}
//高精度减低精度
HA operator-(const int &k)const{
HA c;c.len=len;int t=k;
for(int i=1;i<=c.len;i++){c.v[i]+=v[i]+10-t%10;t/=10;c.v[i+1]+=c.v[i]/10-1;c.v[i]%=10;}
while(c.len>0&&c.v[c.len]==0)c.len--;
return c;
}
//高精度乘低精度
HA operator*(const int &k)const{
HA c;if(len==0||k==0)return c;c.len=len;
for(int i=1;i<=c.len;i++){c.v[i]+=v[i]*k;c.v[i+1]+=c.v[i]/10;c.v[i]%=10;if(c.v[c.len+1]>0)c.len++;}
return c;
}
//高精度除低精度
HA operator/(const int &k)const{HA c;
long long rem=0;
for (int i=len;i>=1;i--){
rem=rem*10+v[i];c.v[i]=rem/k;rem%=k;
if(c.v[i]>0&&c.len==0)c.len=i;//找到最高位
}
return c;
}
//高精度除低精度
HA operator%(const int &k)const{HA c=this->cpy();return(c-((c/k)*k));}
//高精度bool运算
bool operator==(const HA &b)const{
if(len!=b.len)return 0;
for (int i=1;i<=len;i++)if(v[i]!=b.v[i])return 0;
return 1;
}
bool operator!=(const HA &b)const{HA c=this->cpy();return!(c==b);}
bool operator>(const HA &b)const{
if(len!=b.len)return len>b.len;
for(int i=len;i>=1;i--)if(v[i]!=b.v[i])return(v[i]>b.v[i]);
return 0;
}
bool operator>=(const HA &b)const{HA c=this->cpy();return(c==b||c>b);}
bool operator<(const HA &b)const{HA c=this->cpy();return !(c>=b);}
bool operator <=(const HA &b)const{HA c=this->cpy();return !(c>b);}
};
signed main(){
return 0;
}
我的世界3D方块模拟器
//Minecraft模拟器
#include<bits/stdc++.h>
using namespace std;
const char t[10][10]={
"..+---+",
"./ /|",
"+---+ |",
"| | +",
"| |/.",
"+---+.."
};
char c[1010][1010];
int n,m,a[1010][1010],K,L;
void draw(int x,int y){
for(int i=0;i<6;i++){for(int j=0;j<7;j++){if(t[5-i][j]!='.')c[x+i][y+j]=t[5-i][j];}} //放置方块
K=max(K,x+6);
L=max(L,y+7); //画完方块后进行高度更新
}
signed main(){ //Minecraft
cin>>m>>n;
for(int i=0;i<m;i++){for(int j=0;j<n;j++)cin>>a[i][j];} //读入
//前遮后 右遮左 上遮下
for(int i=0;i<1000;i++)for(int j=0;j<1000;j++)c[i][j]='.';
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
for(int k=0;k<a[i][j];k++){
int x,y;//找到左下角坐标
x=3*k+2*(m-i-1);
y=4*j+2*(m-i-1);
draw(x,y);//画方块
}
}
}
for(int i=K-1;i>=0;i--){
for(int j=0;j<L;j++){cout<<c[i][j];}
cout<<endl;
}
return 0;
}
跨年倒计时
#include<bits/stdc++.h>
#include<windows.h>
#include<io.h>
#include<conio.h>
using namespace std;
#define int long long
#define mi 659
#define do1 1046
#define cls system("cls")
#pragma GCC optimize(2,3,"Ofast","inline")
const int N=1e4+10;
int Ye,Mo,Da,Ho,Mi,Se,cnt,dm[999];
int n,s,ln,col;
string sn;
string ts(int x){return to_string(x);}
//NOTE:[0-黑 1-蓝 2-绿 3-浅绿 4-红 5-紫 6-黄 7-白 8-灰 9-淡蓝 10-淡绿 11-淡浅绿 12-淡红 13-淡紫 14-淡黄 15-亮白]
void print(string str,WORD color){ //彩色字
HANDLE handle=::GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO info;
GetConsoleScreenBufferInfo(handle,&info);
WORD colorBak=info.wAttributes;
SetConsoleTextAttribute(handle, color);
for(int i=0;i<(int)str.size();i++){cout<<str[i];}
SetConsoleTextAttribute(handle, colorBak);
}
void print_line_1(){//横线1
for(int i=1;i<=ln;i++){
cout<<" ";
for(int j=1;j<=s;j++){if(sn[i]=='1'||sn[i]=='4'){cout<<" ";}else{cout<<"-";}}
cout<<" ";
if(i!=ln)cout<<" ";
}
cout<<endl;
}
void print_down_1(){//竖线1
for(int i=1;i<=s;i++){
for(int j=1;j<=ln;j++){
if(sn[j]=='1'||sn[j]=='2'||sn[j]=='3'||sn[j]=='7')cout<<" ";
else cout<<"|";
for(int k=1;k<=s;k++)cout<<" ";
if(sn[j]=='5'||sn[j]=='6')cout<<" ";
else cout<<"|";
if(j!=ln)cout<<" ";
}
cout<<endl;
}
}
void print_line_2(){//横线2
for(int i=1;i<=ln;i++){
cout<<" ";
for(int j=1;j<=s;j++){if(sn[i]=='0'||sn[i]=='7'||sn[i]=='1'){cout<<" ";}else{cout<<"-";}}
cout<<" ";
if(i!=ln)cout<<" ";
}
cout<<endl;
}
void print_down_2(){//竖线2
for(int i=1;i<=s;i++){
for(int j=1;j<=ln;j++){
if(sn[j]=='0'||sn[j]=='2'||sn[j]=='6'||sn[j]=='8')cout<<"|";
else cout<<" ";
for(int k=1;k<=s;k++)cout<<" ";
if(sn[j]=='2')cout<<" ";
else cout<<"|";
if(j!=ln)cout<<" ";
}
cout<<endl;
}
}
void print_line_3(){//横线3
for(int i=1;i<=ln;i++){
cout<<" ";
for(int j=1;j<=s;j++){if(sn[i]=='1'||sn[i]=='4'||sn[i]=='7'){cout<<" ";}else{cout<<"-";}}
cout<<" ";
if(i!=ln)cout<<" ";
}
cout<<endl;
}
void title(){
print("------------------------------------",14);print("跨年倒计时",3);print("-------------------------------------\n",14);
}
void end(){
print("-----------------------------------------------------------------------------------",14);
}
void rget(){
time_t now=time(NULL);
tm *tm_t=localtime(&now);
Ye=tm_t->tm_year+1900;
Mo=tm_t->tm_mon+1;
Da=tm_t->tm_mday;
Ho=tm_t->tm_hour;
Mi=tm_t->tm_min;
Se=tm_t->tm_sec;
}
bool isl(int x){
if(x%100!=0&&x%4==0)return 1;
if(x%100==0&&x%400==0)return 1;
return 0;
}
int thisYD,thisD;
void init(){
thisYD=365+isl(Ye);
dm[1]=31,dm[2]=28+isl(Ye),dm[3]=31,dm[4]=30,dm[5]=31,dm[6]=30,dm[7]=31,dm[8]=31,dm[9]=30,dm[10]=31,dm[11]=30,dm[12]=31;
thisD=Da;
for(int i=1;i<Mo;i++)thisD+=dm[i];
}
signed main(){
rget();
system("title 2024to2025 跨年倒计时");
int cnt=24*60*60-Ho*60*60-Mi*60-Se;
while(Ye<2025){ //到2025年结束
title();
rget();
init();
string date=ts(Ye)+"年"+ts(Mo)+"月"+ts(Da)+"日"+ts(Ho)+"时"+ts(Mi)+"分"+ts(Se)+"秒";
string num=ts(Ye)+ts(Mo)+ts(Da)+ts(Ho)+ts(Mi)+ts(Se);
int d[]={Ho/10,Ho%10,Mi/10,Mi%10,Se/10,Se%10};
int m[]={Ye/1000,Ye%1000/100,Ye%100/10,Ye%10,Mo/10,Mo%10,Da/10,Da%10};
string out_date=ts(m[0])+ts(m[1])+ts(m[2])+ts(m[3])+"年"+ts(m[4])+ts(m[5])+"月"+ts(m[6])+ts(m[7])+"日";
out_date+=(ts(d[0])+ts(d[1])+"时"+ts(d[2])+ts(d[3])+"分"+ts(d[4])+ts(d[5])+"秒");
string out_num=ts(m[0])+ts(m[1])+ts(m[2])+ts(m[3])+ts(m[4])+ts(m[5])+ts(m[6])+ts(m[7]);
out_num+=(ts(d[0])+ts(d[1])+ts(d[2])+ts(d[3])+ts(d[4])+ts(d[5]));
print("当前时间:",12);
print(out_date+"\n",6);
col=11;
if(thisD>10)col=11;
else col=199;
HANDLE handle=::GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO info;
GetConsoleScreenBufferInfo(handle,&info);
WORD colorBak=info.wAttributes;
SetConsoleTextAttribute(handle,col);
s=3;
sn=out_num;
ln=sn.size();
sn=" "+sn;
print_line_1();
print_down_1();
print_line_2();
print_down_2();
print_line_3();
SetConsoleTextAttribute(handle, colorBak);
cnt=thisYD*24*60*60-(thisD-1)*24*60*60-Ho*60*60-Mi*60-Se;
if(cnt<0)cnt=0;
int cd[]={(cnt/(24*60*60))/100,(cnt/(24*60*60))%100/10,(cnt/(24*60*60))%10,(cnt%(24*60*60)/(60*60))/10,(cnt%(24*60*60)/(60*60))%10,(cnt%(60*60)/60)/10,(cnt%(60*60)/60)%10,(cnt%60)/10,(cnt%60)%10};
print("------------------------",14);
print("距离2025年还有"+ts(cd[0])+ts(cd[1])+ts(cd[2])+"天"+ts(cd[3])+ts(cd[4])+"小时"+ts(cd[5])+ts(cd[6])+"分钟"+ts(cd[7])+ts(cd[8])+"秒",9);
print("------------------------\n",14);
if(cnt!=0)col=11;
else col=199;
handle=::GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(handle,&info);
colorBak=info.wAttributes;
SetConsoleTextAttribute(handle,col);
s=3;
sn="00000"+ts(cd[0])+ts(cd[1])+ts(cd[2])+ts(cd[3])+ts(cd[4])+ts(cd[5])+ts(cd[6])+ts(cd[7])+ts(cd[8]);
ln=sn.size();
sn=" "+sn;
print_line_1();
print_down_1();
print_line_2();
print_down_2();
print_line_3();
SetConsoleTextAttribute(handle, colorBak);
if(cnt<10){
end();
print("\n"+ts(cnt/10)+ts(cnt%10)+"!",199);
Beep(mi,100);Sleep(900);
cls;
continue;
}
end();
Sleep(1000);cls;
}
Beep(do1,1000);
print("\n--------------------------------",14);print("再见2024,你好2025!",11);print("---------------------------------",14);
return 0;
}
有什么想说的?由此进入讨论区