Codeforces--C2. Good Numbers (hard version)
2024-10-06 19:38:13
题目链接http://codeforces.com/contest/1249/problem/C2。这是道进制转换题,我们的目的是找到最小的一个每个位都是1的三进制数来表示一个十进制数n。做法是,先将n转换为一个三进制数,然后对当前位加上低位的进位大于等于2的位置0并进位,这一步需要注意的是,当前位如果产生进位,需要把该位的低位都给置0,这样才能保证重构后的数最小。
此外,需要注意的是,在利用重构数组计算10进制数的时候,不能用pow函数,因为,pow对3的38次幂是无法计算的,会发生溢出,需要自己写一个。
#include<bits/stdc++.h> using namespace std; int str[]; int intToA(long long n, long long radix){
int len = ;
if(!n){
str[] = ;
return ;
}
long long tmp = n;
do{
tmp /= radix;
str[len++] = n - radix * tmp;
n = tmp;
}while(n);
return len;
} long long solve(long long num){
int n = intToA(num, );
int c = ;
for(int i=;i<n;i++){
if(str[i] + c >= ){
fill(str, str + i, );
str[i] = ;
c = ;
}
else{
str[i] += c;
c = ;
}
}
long long j = ;
long long sum = ;
if(c){
for(int i=;i<n;i++){
j *= ;
}
return j;
}
for(int i=;i<n;i++){
sum += (long long) (str[i] * j);
j *= ;
}
return sum;
} int main(){
int q;
scanf("%d", &q);
while(q--){
long long n;
cin>>n;
cout<<solve(n)<<endl;
}
return ;
}
最新文章
- css3画图之大白(●—●)
- 基于zookeeper的远程方法调用(RMI)的实现
- IT人为什么难以拿到高薪?
- Spring AOP基础知识
- Charles是mac的iddler抓包工具
- JavaScript UI技术选型
- html5笔记
- IFTT-意大利金融交易税
- Android 开发之网易云音乐(或QQ音乐)的播放界面转盘和自定义SeekBar的实现
- render与vue组件和注册
- DVWA 1.9 通关秘籍
- JS_高程6.面向对象的程序设计(2)创建对象_1
- cocos2d-x 2.2.3 建工程
- UVALive - 4094 WonderTeam (贪心)
- Mac OS X 下安装使用 Docker
- vim和xshell配色
- CKeditor、CKFinder的安装配置
- MySQL5.7安装手册
- PHP 基础系列(三) 【转】PHP 函数实现原理及性能分析
- RabbitMQ系列一