link

题意:给定进制数n及一串数字,问在此进制下这串数能看成最小的数(10进制)是多少(如HEX下 1|13|11 = 475)

思路:此题要仔细思考细节。首先要想使数最小那么必定有个想法是使低位的数尽可能大即位数尽可能多,个人想法是从最后一位开始向前遍历,如果位数没有超过n的位数且数值比n小,那么该数可以加入上一个分隔。如果不符合条件,则说明该数应该作为新的分隔。

那么在此就有一个问题了,如果一个分隔是以0开始的(如:10000)显然我们也将0认定为是分隔的一部分,但如果有前导0了(11进制 10110)显然分隔是这样的(10|1|10)此时这个0属于最前面的那个分隔。

故当某个数判断不符合加入上一个分隔的条件,那么还要判断下上一个遍历的数字是否是0,否则要逐步回退到非0位,并将过程中这些0作为当前分隔的一部分。

/** @Date    : 2017-04-02-18.25
* @Author : Lweleth (SoungEarlf@gmail.com)
* @Link : https://github.com/
* @Version :
*/
#include<bits/stdc++.h>
#define LL long long
#define PII pair
#define MP(x, y) make_pair((x),(y))
#define fi first
#define se second
#define PB(x) push_back((x))
#define MMG(x) memset((x), -1,sizeof(x))
#define MMF(x) memset((x),0,sizeof(x))
#define MMI(x) memset((x), INF, sizeof(x))
using namespace std; const int INF = 0x3f3f3f3f;
const int N = 1e5+20;
const double eps = 1e-8; char a[100];
LL ans = 0;
int main()
{
LL n;
while(~scanf("%lld%s", &n, a))
{
ans = 0;
int x = strlen(a);
int y = 0;
int t = n;
while(t)
y++, t /= 10;
LL cnt = 1;
int bit = 0;
int rec = x - 1;
LL b = 1;
for(int i = x - 1; i >= 0; i--)
{
if(t + cnt * (a[i] - '0') < n && bit < y)
t = t + cnt * (a[i] - '0'), cnt *= 10, bit++;
else
{
int ct = 0;
if(a[i + 1] == '0')//考虑到有前导0时回退加值
{
while(a[i + 1] == '0')
{
ct++;
if(i + 1 == rec)
break;
i++;
}
}
ans += t * b;
b = b * n;
t = a[i] - '0';
bit = 1;
cnt = 10;
rec = i;
}
}
if(t != 0)
ans += t * b;
printf("%lld\n", ans);
}
return 0;
}

最新文章

  1. [LeetCode] Remove Duplicates from Sorted Array 有序数组中去除重复项
  2. dedecms /member/flink_main.php SQL Injection Vul
  3. 面试题目-c和c++的区别
  4. DBCP之----&quot;数据库&quot;与&quot;连接池&quot;的连接建立过程
  5. Hadoop学习记录(3)|HDFS API 操作|RPC调用
  6. DBHelper 数据库帮助类
  7. Lodash,你正在使用的JavaScript库
  8. Power on &amp; RESET 之前?
  9. 频繁更换ip会影响SEO优化吗?
  10. Kali~2018安装后的配置
  11. [十六]JavaIO之InputStreamReader 与 OutputStreamWriter
  12. 苹果笔记本安装windows正版操作系统
  13. bmi
  14. python之函数联系
  15. Python带你轻松进行网页爬虫
  16. 网页中Div的打印
  17. [工具]渗透神器CobaltStrike 3.1.2 K8去后门破解版 &amp; Windows版TeamServer
  18. Delphi消息推送
  19. AOAPC I: Beginning Algorithm Contests (Rujia Liu) Volume 6. Mathematical Concepts and Methods
  20. Oracle Lock(Enqueues)

热门文章

  1. 简评搜狗输入法(ios端)
  2. 5月5号周二课堂练习:简评cnblogs.com的用户体验
  3. Java 异常注意事项
  4. IntelliJ IDEA 创建 hello world Java web Maven项目从头到尾都有图有真相2017版本
  5. 因为NLS_LANG 造成 Oracle数据库丢失 中文字符集兼容问题的处理.
  6. sleep() 与 wait()的比较
  7. npm和cnpm(windows)安装步骤
  8. lock 默认公平锁还是非公平锁?公平锁是如何定义?如何实现
  9. zepto中$.proxy()的到底有多强大?
  10. 第204天:js---重载和多态