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網站的支持!