Codeforces-1060-B(水)

Codeforces 1060B - Maximum Sum of Digits

题目原址

[http://codeforces.com/contest/1060/problem/B]

题意

任意给一个数 n ,把他分解为 n = a + b ,求 ab 中的每一位数相加之和的最大值。

题解

直接知道 n = 1 0 i 10^{i} -1 + b 为题所求的情况,于是答案等于9*i加上 b 中的每一位数的和。

实现

#include <stdio.h>
int main() {
    long long n;
    scanf("%lld", &n);
    
    long long m = n;
    int i;
    for (i = 0; (m /= 10) != 0; i++)//计算 m 的位数 i
        continue;
    
    long long ten = 1;
    int k;
    for (k = 0; k < i; k++)//计算10^i
        ten *= 10;
    
    long long b = n - ten + 1;
    int sum = 9 * i;
    while (b != 0) {//把b的每一位数添加到结果
        sum += b % 10;
        b /= 10;
    }
    printf("%d\n", sum);
}

实现优化1

#include <stdio.h>
int main() {
    long long n;
    scanf("%lld", &n);
    
    int i = 0;
    long long ten = 1;
    while(n - ten*10 > 0){//同时计算位数 i 和 10^i
        i++;
        ten*=10;
    }
    
    long long b = n-ten+1;
    int sum = 9 * i;
    while (b != 0) {//同上
        sum += b % 10;
        b /= 10;
    }
    printf("%d\n", sum);
}

猜你喜欢

转载自blog.csdn.net/weixin_43406046/article/details/83962960