C++中signed main和int main的區別

 前言

今天看見大佬的C++代碼,主函數”int main”打成瞭”signed main”,心生疑問,便去查閱。

#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就行瞭

個人平時寫代碼最簡單的缺省源是:

#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

主要區分

#define ll long long
int main(){
    ll int x;
    scanf("%lld",&x);
}
 
#define int long long
signed main(){
 	...
}

一種獨特的定義longlong的方法:

#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的區別,希望對大傢有所幫助。在此也非常感謝大傢對WalkonNet網站的支持!

推薦閱讀: