HDU 2451 Simple Addition Expression

题目大意:有一个关于 简单加法表达式  的定义告诉你,就是  选一个数字i  如果 i+(i+1)+(i+2) 它的和,没有任何一位进位的话,那就是 一个i的简单加法表达式,求小于n的表达式数目。

题解:排列组合分类讨论即可……

#include <cstdio> 
#include <cmath> 
#include <cstring> 
using namespace std;  
char s[15];   
int solve(int i,int p){  
    if(p==1)return s[i]>'2'?3:s[i]-'0'+1;  
    if(s[i]>'3'){return (int)pow(4.0,p-1)*3;}
    else{   
        int t1=(int)(pow(4.0,p-2)*3*(s[i]-'0'));  
        int t2=solve(i+1,p-1);
        return t1+t2;  
    }  
}  
int main(){  
    __int64 n;  
    while(scanf("%I64d",&n)!=EOF){  
        n--;  
        sprintf(s,"%I64d",n);  
        printf("%d\n",solve(0,strlen(s)));  
    }  
    return 0;  
}  
posted @ 2014-04-13 14:52  forever97  阅读(175)  评论(0编辑  收藏  举报