题意:题意:一个n进制下的数k,其中k不会用字母,如果有A就用10代替了。求k这个数对应的,在10进制下最小的数。
先发一个大佬的博客,下面主要是参考了他的思想:https://www.cnblogs.com/TreeDream/p/6322755.html
下面是我按照他的源代码写了备注然后过了的一段代码:(注::::::::主要代码来自上面那个老哥)
代码如下:
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const ll INF=(1LL<<62)-1;//奇妙的设法 5 char s[105]; 6 ll dp[105]; 7 int main() 8 { 9 int n; 10 scanf("%d%s",&n,s+1); 11 int len=strlen(s+1); 12 for(int i=0; i<=len; i++) 13 dp[i]=INF;//求最小,先赋比较大的值 14 dp[0]=0; 15 for(int i=1; i<=len; i++) //核心思想是从前到后 16 { //这样可以判断前导0,而且n也方便相乘 17 ll now=0; 18 for(int j=i; j<=len; j++) 19 { 20 now=now*10+s[j]-'0'; 21 if(now>=n)break; 22 if(s[i]=='0' && j>i)break; 23 if(1.0*dp[i-1]*n+now>2e18)break; 24 dp[j]=min(dp[j],dp[i-1]*n+now);//从后往前看,这个n可以直接赋掉 25 } 26 } 27 printf("%lld",dp[len]); 28 return 0; 29 }
接下来是我重写的一遍代码: