题目描述
每一轮求出[p, q]区间内数字的个位数的和,并计入总和;再将[p, q]区间内个位数为0的数除以10,产生新区间,进入下一轮,再求新区间内数字的个位数的和,并计入总和,而个位数为0的数除以10,产生新区间;以此类推;直到[p, q]区间内的数只有个位数
此题有一定难度,需要多多思考
#include<iostream>
using namespace std;
#define ll long long
ll sum;
ll f(ll x){
if(x==0)
return 0;
else if(x%10)
return x%10;
else
return f(x/10);
}
void solve(ll p,ll q){
if(q-p<9){
for(int i=p;i<=q;i++)
sum+=f(i);
return ;
}
while(p%10){
sum+=f(p);
p++;
}
while(q%10){
sum+=f(q);
q--;
}
sum+=45*(q-p)/10;
solve(p/10,q/10);
}
int main(){
ll p,q;
while(cin>>p>>q){
if(p<0&&q<0)
return 0;
sum=0;
solve(p,q);
cout<<sum<<endl;
}
}