博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FJUT2018年四校联合周赛-第三场(新手场)A题题解
阅读量:5842 次
发布时间:2019-06-18

本文共 940 字,大约阅读时间需要 3 分钟。

Problem Description

集训队最菜的卖女孩的小火柴最近遇到了一个大麻烦.

他读幼儿园的妹妹问了他一题问题:给出一个数n,接着给出两个数a,b(2<=a<=b<=35).
让你求出a进制的n数转化为a+1进制后的值在转化为a+2进制,然后在转化为a+3进制,直到转化为b进制为止.
大于9的数用大写的ABCD....表示.
数据保证进制每次转化后的数小于10^18.
他太菜了,所以不会,相信各位ACMER大佬们会帮他解答(这么水的题你不帮我写?).

Input

T组输入

接下来T行,每行一个a进制整数n,两个正整数a,b

(T<=500000,0<=n<=10^18)

Output

对每次输入,输出答案

SampleInput
311 10 12BAD 15 20111111 2 5
SampleOutput
B6BI223 思路:题目要求把n转化为a+1进制,在转a+2进制,直到b进制为止。 如果你按题目的要求来的话,直接tle。 不难发现,你把n转化为a+1进制的时候,是先把a进制转为10进制,然后在转a+1进制,然后从a+1进制转a+2进制,是把a+1进制的数转为10进制,在转a+3. 所以可以直接跳过中间这些,直接把a进制数n转为b进制就OK了. 其中0需要特判,因为0的话没办法转进制,不会输出0. 附上AC部分代码:
x=0;scanf("%s %d %d",&s,&r,&k);for(i=0; s[i]; i++)    if(s[i]>64&&s[i]<91)        x=x*r+s[i]+10-'A';    else        x=x*r+s[i]-'0';if(!x){    puts("0");    continue;}for(i=0; x; i++){    r=x%k;    if(r>9)        s[i]='A'+r-10;    else        s[i]='0'+r;    x/=k;}for(i=i-1; i+1;)    printf("%c",s[i--]);puts("");

 

转载于:https://www.cnblogs.com/rainH/p/8640300.html

你可能感兴趣的文章
Java内存管理原理及内存区域详解
查看>>
ios、android 数据可视化图表赏析
查看>>
LoadRunner中的一些性能名词解释
查看>>
Linux服务器的swap使用率分析
查看>>
Cenos5 安装 python2.7的easy_install
查看>>
死锁产生的必要条件,如何有效地避免死锁
查看>>
eclipse使用git提交到osc
查看>>
项目迁移总结
查看>>
easyui datagrid filter 空字符串、数字过滤bug修复
查看>>
ARP欺骗
查看>>
Linux学习笔记第八周三次课(3月28日)
查看>>
思科单臂路由与VTP综合配置
查看>>
linux du/df 命令
查看>>
表单设计器公式设计参考
查看>>
接口文档管理工具-Postman、Swagger、RAP、DOClever
查看>>
sql语句中like的用法
查看>>
深入学习 Java 序列化
查看>>
JenKins
查看>>
工作4-5年的.NET开发人员也需要有人带带才可以保证软件项目的质量
查看>>
shell脚本创建用户并设置密码
查看>>