代码鉴赏

http://d1kt.cn/mod/programming/view.php?id=1567快速求和的递归写法:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>

using namespace std;

int f(char s[],int N);
int makeint(char s[],int n);
int main()
{
    char s[40];
    int n;
    freopen("quicksum.in","r",stdin);
    freopen("quicksum.out","w",stdout);
    cin>>s>>n;
    cout<< f(s,n)<<endl;
    return 0;
}
int f(char s[],int N)
{
    int nlen = strlen(s),t,xmin = 999,temp;
    if (makeint(s,nlen)==N)
    {
        return 0;
    }
    if (nlen == 1 && (s[0]-'0' != N))
    {
        return -1;
    }
    for (int i=1;i<=nlen;++i)
    {
        t = makeint(s,i);
        if (N<t)
        {
            break;
        }
        temp = f(s+i,N-t);
        if (temp != -1 && xmin > temp +1)
        {
            xmin = temp +1;
        }
    }
    if (xmin == 999)
    {
        xmin = -1;
    }
    return xmin;
}
int makeint(char s[],int n)
{
    int t =0,p=0;
    while (n--)
    {
        t*=10;
        t+=s[p++] -'0';
    }
    return t;
}

最后修改: 2013年01月17日 星期四 08:45