题目描述:
输入描述:
输出描述:
样例输入:
2
35
1000000000
样例输出:
17
82
题目大意:t组数据,每组给出一个正整数n,把n分成两个数,a和b,a+b=n,使得把a的每一位和b的每一位分解出来相加得到的值最大。
这是一个技巧思想题。
35=10+25=11+24=12+23=18+17=19+16
既然要求一个最大的值,只需要这两个数的每一位数字尽可能大并且位数尽可能多就行了,根据贪心思想,每次都给数字的对应位置填上数字9就可以了
代码如下:
#include<bits/stdc++.h>
using namespace std;
long long c(long long n){
long long res=0;
while(n){
res+=n%10;
n/=10;
}
return res;
}
int main(){
int t;
cin>>t;
long long n;
while(t--){
cin>>n;
long long ans=0;
while(ans*10+9<=n){
ans=ans*10+9;
}
cout<<c(ans)+c(n-ans)<<endl;
}
return 0;
}