時間限制: 1000 ms ??? ??? 內(nèi)存限制: 524288 KB
提交數(shù): 1471 ??? 通過數(shù): 540
小文同學(xué)剛剛接觸了信息學(xué)競賽,有一天她遇到了這樣一個題:給定正整數(shù)?aa?和?bb,求?abab?的值是多少。
abab?即?bb?個?aa?相乘的值,例如?2323?即為?33?個?22?相乘,結(jié)果為?2×2×2=82×2×2=8。
“簡單!”小文心想,同時很快就寫出了一份程序,可是測試時卻出現(xiàn)了錯誤。
小文很快意識到,她的程序里的變量都是 int 類型的。在大多數(shù)機(jī)器上,int 類型能表示的大數(shù)為?231?1231?1?,因此只要計算結(jié)果超過這個數(shù),她的程序就會出現(xiàn)錯誤。
由于小文剛剛學(xué)會編程,她擔(dān)心使用 int 計算會出現(xiàn)問題。因此她希望你在?abab?的值超過?109109?時,輸出一個?‐1‐1?進(jìn)行警示,否則就輸出正確的?abab?的值。
然而小文還是不知道怎么實現(xiàn)這份程序,因此她想請你幫忙。
【輸入】輸入共一行,兩個正整數(shù)?aa,?bb?。
【輸出】輸出共一行,如果?abab?的值不超過?109109?,則輸出?abab?的值,否則輸出?‐1‐1?。
【輸入樣例】10 9【輸出樣例】
1000000000【提示】
【樣例 2 輸入】
23333 66666
【樣例 2 輸出】
-1
【數(shù)據(jù)范圍】
對于 10% 的數(shù)據(jù),保證?b=1b=1。
對于 30% 的數(shù)據(jù),保證?b≤2b≤2。
對于 60% 的數(shù)據(jù),保證?b≤30b≤30,ab≤1018ab≤1018。
對于 100% 的數(shù)據(jù),保證?1≤a1≤a,?b≤109b≤109。
這道題初次一看,有些人會這樣寫:
#includeusing namespace std;
int main()
{
//freopen("pow.in","r",stdin);
//freopen("pow.out","w",stdout);
int a=0,b=0;
scanf("%d%d",&a,&b);
if(pow(a,b)>1e9)
{
printf("-1");
return 0;
}
int c=pow(a,b);
printf("%d",c);
//fclose(stdin);
//fclose(stdout);
}
但是,如果你這樣提交后雖然會給滿分,但是在CSP中,這種寫法可能連1/4的分?jǐn)?shù)也拿不到,畢竟現(xiàn)在玩的都是大數(shù)據(jù)。并且使用pow可能會超時。
有些人會這樣寫:
#includeusing namespace std;
long long a,b,sum=1;
int main()
{
//freopen("pow.in","r",stdin);
//freopen("pow.out","w",stdout);
scanf("%d%d",&a,&b);
for(int i=1;i<=b;i++)
{
sum=sum*a;
if(sum>1000000000)
{
printf("-1");
return 0;
}
}
printf("%d",sum);
//fclose(stdin);
//fclose(stdout);
return 0;
}
改成這樣的代碼,只要sum大于了1e9,就直接退出,這個代碼已經(jīng)可以拿到90分了;
如果a=1是,無論是b是多少,都為1,如果b很大的話,那時間就不夠。滿分代碼如下:
#includeusing namespace std;
long long a,b,sum=1;
int main()
{
//freopen("pow.in","r",stdin);
//freopen("pow.out","w",stdout);
scanf("%d%d",&a,&b);
if(a==1)
{
printf("1");
return 0;
}
for(int i=1;i<=b;i++)
{
sum=sum*a;
if(sum>1e9)
{
printf("-1");
return 0;
}
}
printf("%d",sum);
//fclose(stdin);
//fclose(stdout);
return 0;
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
文章標(biāo)題:2086:【22CSPJ普及組】乘方(pow)-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://jinyejixie.com/article4/dijeoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、品牌網(wǎng)站制作、網(wǎng)站改版、企業(yè)建站、關(guān)鍵詞優(yōu)化、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容