1. 程式人生 > >Codeforces-1060-B(水)

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); }