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