zoukankan      html  css  js  c++  java
  • 【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                 else
    25                     ans += k;
    26             } else if (k > 3) {
    27                 ans += pre[len-i]*3;
    28                 break;
    29             } else
    30                 ans += k*pre[len-i-1]*3;
    31         }
    32         printf("%I64d
    ", ans);
    33     }
    34 
    35     return 0;
    36 }
  • 相关阅读:
    构建之法阅读笔记02
    四则运算2
    第一周学习进度条
    简单四则运算
    构建之法阅读笔记01
    简读《构建之法》,所想问题展示
    介绍
    典型用户和用户场景描述
    工作总结03
    工作总结02
  • 原文地址:https://www.cnblogs.com/bombe1013/p/3906152.html
Copyright © 2011-2022 走看看