如何求一个数的位数最大和
题目思路
给定一个数,从他最小位到最高位进行操作,对于每一位上的数字,可以选择让他加1,减1,或者是保持不变,求位数最大和(对于整体其实减去了一个10的多少次方)
思路
要使得每一位的总和最大,我们可以对每一位进行一个判断
我们只需要对0和9这两个数字进行判断即可,如果当前位不是0或者9,我们只需要加1保证他的最大值
如果当前位是9,我们就保持不变即可,因为9本身就是个位数中最大的数字
如果当前位数是0,我们就要-1,因此我们需要从前面一位去借一个1,例如100-1=99,90-1=89使得前面的数字也因此受到改变。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve(){
int n;
cin>>n;
int ans=0;
if(n==0){
ans=1;
}
else{
while(n){
if(n%10==0){
n-=1;
}
else if(n%10!=9){
n+=1;
}
ans+=(n%10);
n/=10;
}
}
cout<<ans<<endl;
}
int main(){
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}
标签:10,各位,数字,int,求有,n%,位数,ans,操作
From: https://www.cnblogs.com/du463/p/17632319.html