


























大家都知道pow函数是返回double类型的,但有时我们希望求整数的次方用它,只不过强制转换为int or __int64,虽然很多时候这样是可行的,但是也有特殊情况,比如我这次遇到的。
Description
设有一个长度为N的数字串(N ≤ 15),我们要求使用K个乘号,将其分成K+1份。
找出一种分法,使得这K+1部分的乘积为最大。
例如:K = 1,数字串为312时会有以下两种分法:
1) 3*12 = 36
2) 31*2 = 62
这时,符合题目要求的结果是:62
my code:
#include<iostream>
#include<string.h>
__int64 k;
char arr[15];
__int64 get_v(__int64 s,__int64 e){
__int64 i,v=arr[e]-48,t=1;
for(i=e-1;i>=s;i--){
t*=10;
v+=(arr[i]-48)*t;
}
return v;
}
__int64 find(__int64 s,__int64 e,__int64 kt){
if(kt==0)
return get_v(s,e);
__int64 i,m=0,t;
for(i=s;i<=e-kt;i++){
t=find(i+1,e,kt-1)*get_v(s,i);
if(t>m)
m=t;
}
return m;
}
int main(){
while(scanf("%I64d",&k)!=-1){
scanf("%s",arr);
__int64 l=(__int64)strlen(arr),s=0,kt=k,i,t;
if(k>0){
for(i=0;i<=l-1-kt;i++){
t=find(i+1,l-1,kt-1)*get_v(0,i);
if(t>s)
s=t;
}
}
else
s=get_v(0,l-1);
printf("%I64d\n",s);
}
}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。