玄关求调
查看原帖
玄关求调
819319
wattzyh楼主2025/1/20 21:25
#include<bits/stdc++.h>
#define int long long
using namespace std;
int ans,d[100009];
int wei(int x){
	int cnt=0;
	while(x!=0){
		d[cnt++]=x%10;
		x/=10;
	} 
	for(int i=cnt-2;i>=0;i--){
		if(d[i]>=d[cnt-1]){
			for(int j=i;j>=0;j--) d[j]=d[cnt-1]-1;
			break;
		}
	}
	return cnt;
}
void dfs(int step,int len){
	if(step==0){
		ans+=d[0]+1;
		return ;
	}
	else if(step==len-1){
		for(int i=1;i<d[len-1];i++) ans+=pow(i,step);
	}
	else ans+=d[step]*pow(d[len-1],step);
	dfs(step-1,len);
}
int a[1009],ans1,ans2 ;
signed main(){
	int l,r;
	cin>>l>>r;
	if(l - 1 < 10) ans1 = 0;
	else{
		int x=wei(l-1);
		for(int i = 2; i < x; i++)
			for(int j = 1; j < 10; j++) ans += pow(j, i - 1);
		dfs(x-1,x);
		ans1=ans;
	}
	ans = 0;
	if(r < 10) ans2=0;
	else{
		int y=wei(r);
		for(int i = 2; i < y; i++)
			for(int j = 1; j < 10; j++) ans += pow(j, i - 1);
		dfs(y-1,y);
		ans2=ans;
	}
	cout<<ans2-ans1;
	return 0;
}
2025/1/20 21:25
加载中...