NC21723. LLLYYY的数字思维
描述
输入描述
采用多组输入方式。每行输入一个整数 c ()。
输出描述
对于每一个 c,找到一组 a,b ,使 f(a) + f(b)最大 且 a + b = c,输出这个f(a) + f(b)()。
示例1
输入:
35 10000000000
输出:
17 91
说明:
在第一个样例中,可以选择 a = 17,b = 18,这样得到的f(a) + f(b)值最大为 17。C++(g++ 7.5.0) 解法, 执行用时: 2ms, 内存消耗: 296K, 提交时间: 2023-03-19 17:07:39
#include<bits/stdc++.h> using namespace std; int main(){ int64_t c; while (cin >> c) { int64_t t = 10; while (t-1<c) t*=10; t/=10; string s = to_string(t-1) + to_string(c-t+1); int tot = 0; for (auto ch: s) tot += ch-'0'; cout << tot << endl; } }
C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 484K, 提交时间: 2018-12-23 16:04:05
#include <bits/stdc++.h> using namespace std; int S (long long x) { int ans=0; while(x) ans+=x%10,x/=10; return ans; } int main() { long long n; while(cin>>n) { long long A = 0; while(A*10+9 < n) A = A*10+9; cout<<S(A)+S(n-A)<<endl; } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 344K, 提交时间: 2021-06-23 11:01:51
#include <stdio.h> int main () { long long n,i,j,k; while(scanf("%lld",&n)!=EOF) { i=0; j=-1; k=0; while(n) { i=i+n%10; if(n%10==9&&k==0) j--; else k=1; n=n/10; j++; } if(k==0) j++; printf("%lld\n",i+9*j); } return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 452K, 提交时间: 2020-01-14 15:45:28
#include <iostream> using namespace std; int main() { long long x,sum,a; while(cin>>x) { a=9;sum=0; while(x-a>0) { sum+=9; a=a*10+9; } x-=a/10; while(x>0) { sum+=x%10; x/=10; } cout<<sum<<endl; } return 0; }
Python3(3.5.2) 解法, 执行用时: 29ms, 内存消耗: 3320K, 提交时间: 2020-01-17 23:51:41
def f(x): return sum([int(i) for i in list(str(x))]) while True: try: x=int(input()) a=0 while a*10+9<=x: a=a*10+9 print(f(a)+f(x-a)) except: break