時(shí)間限制: 1000 ms ??? ??? 內(nèi)存限制: 524288 KB
提交數(shù): 1471 ??? 通過(guò)數(shù): 540
小文同學(xué)剛剛接觸了信息學(xué)競(jìng)賽,有一天她遇到了這樣一個(gè)題:給定正整數(shù)?aa?和?bb,求?abab?的值是多少。
abab?即?bb?個(gè)?aa?相乘的值,例如?2323?即為?33?個(gè)?22?相乘,結(jié)果為?2×2×2=82×2×2=8。
“簡(jiǎn)單!”小文心想,同時(shí)很快就寫(xiě)出了一份程序,可是測(cè)試時(shí)卻出現(xiàn)了錯(cuò)誤。
小文很快意識(shí)到,她的程序里的變量都是 int 類型的。在大多數(shù)機(jī)器上,int 類型能表示的大數(shù)為?231?1231?1?,因此只要計(jì)算結(jié)果超過(guò)這個(gè)數(shù),她的程序就會(huì)出現(xiàn)錯(cuò)誤。
由于小文剛剛學(xué)會(huì)編程,她擔(dān)心使用 int 計(jì)算會(huì)出現(xiàn)問(wèn)題。因此她希望你在?abab?的值超過(guò)?109109?時(shí),輸出一個(gè)?‐1‐1?進(jìn)行警示,否則就輸出正確的?abab?的值。
然而小文還是不知道怎么實(shí)現(xiàn)這份程序,因此她想請(qǐng)你幫忙。
【輸入】輸入共一行,兩個(gè)正整數(shù)?aa,?bb?。
【輸出】輸出共一行,如果?abab?的值不超過(guò)?109109?,則輸出?abab?的值,否則輸出?‐1‐1?。
【輸入樣例】10 9【輸出樣例】
1000000000【提示】
【樣例 2 輸入】
23333 66666
【樣例 2 輸出】
-1
【數(shù)據(jù)范圍】
對(duì)于 10% 的數(shù)據(jù),保證?b=1b=1。
對(duì)于 30% 的數(shù)據(jù),保證?b≤2b≤2。
對(duì)于 60% 的數(shù)據(jù),保證?b≤30b≤30,ab≤1018ab≤1018。
對(duì)于 100% 的數(shù)據(jù),保證?1≤a1≤a,?b≤109b≤109。
這道題初次一看,有些人會(huì)這樣寫(xiě):
#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);
}
但是,如果你這樣提交后雖然會(huì)給滿分,但是在CSP中,這種寫(xiě)法可能連1/4的分?jǐn)?shù)也拿不到,畢竟現(xiàn)在玩的都是大數(shù)據(jù)。并且使用pow可能會(huì)超時(shí)。
有些人會(huì)這樣寫(xiě):
#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,就直接退出,這個(gè)代碼已經(jīng)可以拿到90分了;
如果a=1是,無(wú)論是b是多少,都為1,如果b很大的話,那時(shí)間就不夠。滿分代碼如下:
#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級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
文章標(biāo)題:2086:【22CSPJ普及組】乘方(pow)-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://www.chinadenli.net/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)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容