前言
今天看見大佬的C++代碼,主函數"int main"打成了"signed main",心生疑問,便去查閱。
1
2
3
4
5
6
7
8
9
10
|
#pragma Gcc optimize(3,"inline","Ofast"); #include<bits/stdc++.h> using namespace std; #define int long long typedef long long ll; signed main(){ double d;cin>>d; printf ( "%.1f" ,d/59535); } |
因為頭文件聲明:#define int long long
,然后int main改成signed main就行了
個人平時寫代碼最簡單的缺省源是:
1
2
3
4
5
6
|
#include<bits/stdc++.h> #define int long long using namespace std; signed main(){ return 0; } |
注意到 #define int long long
而 main 函數必須返回一個 int 值,所以不能使用 int main()。
那怎么辦呢?通常使用 signed main,因為 signed 等效替代于 signed int,也就是有符號整型,這與 int 別無二致,并且不會導致奇怪的 CE。
int本來就是signed int。int = signed int = signed,就像unsigned = unsigned int
當你不確定過程中會不會爆 int 的時候,可以這么寫。
同樣的字節數,如果保存符號位,范圍為正負,數字位相對少一,絕對值范圍小
總結:
頭文件聲明#define int long long
,防止爆int
主要區分
1
2
3
4
5
6
7
8
9
10
|
#define ll long long int main(){ ll int x; scanf ( "%lld" ,&x); } #define int long long signed main(){ ... } |
一種獨特的定義longlong的方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#include< bits /stdc++.h> #define int long long using namespace std; const int p=1e9+3; int T,n,m,a,fac[100010]={1}; signed main() { for(int i=1;i<=100000;i++) fac[i]=fac[i-1]*i%p; scanf("%lld",&T); while(T--) { int res=1,ans=1; scanf("%lld %lld",&n,&m); for(int i=1;i<=n;i++) scanf("%lld",&a),res=res*fac[a]%p; for(int i=1;i<=m;i++) scanf("%lld",&a),ans=ans*fac[a]%p; if(res==ans) puts("equal"); else puts("unequal"); } return 0; } |
以上所述是小編給大家介紹的C++中signed main和int main的區別,希望對大家有所幫助。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:https://blog.csdn.net/qq_46092061/article/details/121788512