题面:
将一个位数为L的自然数N拆成4段,使各段对应的数的乘积最小。你能编一个程序实现吗?
Input
一个自然数N。
Output
一个整数,最小乘积。
思路:
三重循环,枚举位置,算就行了
代码:
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
unsigned int f(string number,int i,int j,int k,int len)
{
unsigned int ans1=0,ans2=0,ans3=0,ans4=0;
for(int p=0;p<=i;++p)
ans1=ans1*10+number[p]-'0';
for(int p=i+1;p<=j;++p)
ans2=ans2*10+number[p]-'0';
for(int p=j+1;p<=k;++p)
ans3=ans3*10+number[p]-'0';
for(int p=k+1;p<len;++p)
ans4=ans4*10+number[p]-'0';
return ans1*ans2*ans3*ans4;
}
int main()
{
string number;
cin>>number;
unsigned ans=1<<30,len=number.size();//初始一个极大值
for(int i=0;i<len-1;++i)
for(int j=i+1;j<len-1;++j)
for(int k=j+1;k<len-1;++k)
ans=min(ans,f(number,i,j,k,len));
cout<<ans<<endl;
return 0;
}