晶石候任
查看原帖
晶石候任
1396773
Genshigros楼主2025/1/25 10:36

一枚蒟蒻調題調了10坤分鐘。
第一,十年OI一場空,不開long long見祖宗。
第一次沒開long long,75分 評測記錄 代碼:

#include<bits/stdc++.h>
using namespace std;
#define int long long
char a[100],b[100],c[100];
int cnt1,cnt2;
void inT(int x){
	int ans=0;
	while(x){
		int md=x%10;
		ans=ans*10+md;
		x/=10;
	}
	cout<<ans;
}
void floaT(int x,int y){
	inT(x);
	cout<<'.';
	inT(y);
}
void fen(int x,int y){
	inT(x);
	cout<<'/';
	inT(y);
}
void bai(int x){
	inT(x);
	cout<<'%';
}
signed main(){
	int at=1;
	cin>>a;
	for (int i=0;i<strlen(a);i++){
		if (a[i]=='.')at=2;
		if (a[i]=='/')at=3;
		if (a[i]=='%')at=4;
	}
	if (at==1){
		inT(atoi(a));
	}else if (at==2){
		int flag=0;
		for (int i=0;i<strlen(a);i++){
			if (a[i]=='.'){
				flag=1;
				continue;
			}
			if (!flag){
				b[cnt1++]=a[i];
			}else{
				c[cnt2++]=a[i];
			}
		}
		floaT(atoi(b),atoi(c));
	}else if (at==3){
		int flag=0;
		for (int i=0;i<strlen(a);i++){
			if (a[i]=='/'){
				flag=1;
				continue;
			}
			if (!flag){
				b[cnt1++]=a[i];
			}else{
				c[cnt2++]=a[i];
			}
		}
		fen(atoi(b),atoi(c));
	}else{
		for (int i=0;i<strlen(a)-1;i++){
			b[cnt1++]=a[i];
		}
		bai(atoi(b));
	}
}

第二次開了long long,結果又發現數據範圍還是超了。 評測記錄

#include<bits/stdc++.h>
using namespace std;
#define int long long//就用這裡的define快速改了一下(主函數用了signed,不會被改動)
#define atoi atoll//同上(是字符數組轉整數的函數)
char a[100],b[100],c[100];
int cnt1,cnt2;
void inT(int x){
	int ans=0;
	while(x){
		int md=x%10;
		ans=ans*10+md;
		x/=10;
	}
	cout<<ans;
}
void floaT(int x,int y){
	inT(x);
	cout<<'.';
	inT(y);
}
void fen(int x,int y){
	inT(x);
	cout<<'/';
	inT(y);
}
void bai(int x){
	inT(x);
	cout<<'%';
}
signed main(){
	int at=1;
	cin>>a;
	for (int i=0;i<strlen(a);i++){
		if (a[i]=='.')at=2;
		if (a[i]=='/')at=3;
		if (a[i]=='%')at=4;
	}
	if (at==1){
		inT(atoi(a));
	}else if (at==2){
		int flag=0;
		for (int i=0;i<strlen(a);i++){
			if (a[i]=='.'){
				flag=1;
				continue;
			}
			if (!flag){
				b[cnt1++]=a[i];
			}else{
				c[cnt2++]=a[i];
			}
		}
		floaT(atoi(b),atoi(c));
	}else if (at==3){
		int flag=0;
		for (int i=0;i<strlen(a);i++){
			if (a[i]=='/'){
				flag=1;
				continue;
			}
			if (!flag){
				b[cnt1++]=a[i];
			}else{
				c[cnt2++]=a[i];
			}
		}
		fen(atoi(b),atoi(c));
	}else{
		for (int i=0;i<strlen(a)-1;i++){
			b[cnt1++]=a[i];
		}
		bai(atoi(b));
	}
}

最終衹能特殊判定如果超出long long範圍的,就用這篇題解(不要隨便看題解,先自己做哈)裡的方法做的整數部分特殊判定時的輸出方式(當然我沒看題解,我全AC之後才看的)。
哎呦,我的時間啊,我還要van 根申 和 屁股肉呢啊(自己查是啥個東西)

2025/1/25 10:36
加载中...