首页 > 代码库 > 【HDOJ】2451 Simple Addition Expression
【HDOJ】2451 Simple Addition Expression
递推,但是要注意细节。题目的意思,就是求s(x) = i+(i+1)+(i+2),i<n。该表达中计算过程中CA恒为0(包括中间值)的情况。根据所求可推得。
1-10: 3
1-100: 3*4
1-1000: 3*4*4
1-10000: 3*4*4*4
1-10^n: 3*4^(n-1)。
并且需要注意,一旦发现某一位大于3,则应立即跳出累加的循环。比如,f(133) = 24,f(143) = 24。同时,单独讨论个位的情况。28行的break处理该种情况。
1 #include <cstdio> 2 #include <cstring> 3 4 __int64 pre[11]; 5 char buf[15]; 6 7 int main() { 8 int i, k, len; 9 __int64 ans;10 11 pre[0] = 1;12 pre[1] = 1;13 for (i=2; i<11; ++i)14 pre[i] = pre[i-1]<<2;15 16 while (scanf("%s", buf) != EOF) {17 len = strlen(buf);18 ans = 0;19 for (i=0; i<len; ++i) {20 k = buf[i] - ‘0‘;21 if (i == len-1) {22 if (k > 3)23 ans += 3;24 else25 ans += k;26 } else if (k > 3) {27 ans += pre[len-i]*3;28 break;29 } else30 ans += k*pre[len-i-1]*3;31 }32 printf("%I64d\n", ans);33 }34 35 return 0;36 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。