Codeforces-1060-B(水)
阿新 • • 發佈:2018-11-15
Codeforces 1060B - Maximum Sum of Digits
題目原址
[http://codeforces.com/contest/1060/problem/B]
題意
任意給一個數 n ,把他分解為 n = a + b ,求 a 與 b 中的每一位數相加之和的最大值。
題解
直接知道 n = -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);
}