NOIP2000 提高组 复赛 进制转换
2017-01-07 20:17
169 查看
NOIP2000 提高组 复赛 进制转换
1.该题难在弄懂样例,负进制,余数为>=0
2.试了一下,程序自带的/,%发现对负进制转换无用,得自个写一套。
3.弄懂了-15转-2进制,余数>=0,商正负都可以。模拟如下:
-15除-2=8余1
8除-2=-4余0
-4除-2=2余0
2除-2=-1余0
-1除-2=1余1
-15=110001
4.准备写chu,yu两个函数,对照上述模拟,写出了。
5.编码,样例很快通过,提交AC.
耗时:弄懂题意,模拟成功15分钟,编码20分钟
总耗时:35分钟
难度:中等。
附上AC代码,编译环境Dev-C++4.9.9.2
//2000 进制转换
#include <stdio.h>
int chu(int a,int b){//除的结果,a是整数,b是负进制
int ans;
int a1,b1;
b1=b*(-1);
if(a>0){//大于0
if(a%b1==0)
ans=a/b1*(-1);
else{
ans=a/b1*(-1);
}
}else{//小于0
a1=a*(-1);
if(a1%b1==0)
ans=a1/b1;
else{
ans=a1/b1+1;
}
}
return ans;
}
int yu(int a,int b){
int ans;
int a1,b1;
b1=b*(-1);
if(a>0){//大于0
ans=a-chu(a,b)*b;
}else{//小于0
a1=a*(-1);
ans=chu(a,b)*b1-a1;
}
return ans;
}
int main(){
int a,b;
int a1,b1;
int stack[100];
int top;
int v;
scanf("%d%d",&a,&b);
b1=b*(-1);
top=-1;
printf("%d=",a);
while(!(a>0&&a<b1)){
top++;
stack[top]=yu(a,b);
a=chu(a,b);
}
top++;
stack[top]=a;
while(top>=0){
v=stack[top--];
if(v<10)
printf("%d",v);
else{
printf("%c",'A'+v-10);
}
}
printf("(base%d)\n",b);
return 0;
}
1.该题难在弄懂样例,负进制,余数为>=0
2.试了一下,程序自带的/,%发现对负进制转换无用,得自个写一套。
3.弄懂了-15转-2进制,余数>=0,商正负都可以。模拟如下:
-15除-2=8余1
8除-2=-4余0
-4除-2=2余0
2除-2=-1余0
-1除-2=1余1
-15=110001
4.准备写chu,yu两个函数,对照上述模拟,写出了。
5.编码,样例很快通过,提交AC.
耗时:弄懂题意,模拟成功15分钟,编码20分钟
总耗时:35分钟
难度:中等。
附上AC代码,编译环境Dev-C++4.9.9.2
//2000 进制转换
#include <stdio.h>
int chu(int a,int b){//除的结果,a是整数,b是负进制
int ans;
int a1,b1;
b1=b*(-1);
if(a>0){//大于0
if(a%b1==0)
ans=a/b1*(-1);
else{
ans=a/b1*(-1);
}
}else{//小于0
a1=a*(-1);
if(a1%b1==0)
ans=a1/b1;
else{
ans=a1/b1+1;
}
}
return ans;
}
int yu(int a,int b){
int ans;
int a1,b1;
b1=b*(-1);
if(a>0){//大于0
ans=a-chu(a,b)*b;
}else{//小于0
a1=a*(-1);
ans=chu(a,b)*b1-a1;
}
return ans;
}
int main(){
int a,b;
int a1,b1;
int stack[100];
int top;
int v;
scanf("%d%d",&a,&b);
b1=b*(-1);
top=-1;
printf("%d=",a);
while(!(a>0&&a<b1)){
top++;
stack[top]=yu(a,b);
a=chu(a,b);
}
top++;
stack[top]=a;
while(top>=0){
v=stack[top--];
if(v<10)
printf("%d",v);
else{
printf("%c",'A'+v-10);
}
}
printf("(base%d)\n",b);
return 0;
}
相关文章推荐
- [NOIP2000] 提高组 洛谷P1017 进制转换
- NOIP2000 提高组 复赛 方格取数
- NOIP 2000 提高组 复赛 单词接龙
- [NOIP提高组2000]进制转换
- [NOIP提高组2000]进制转换
- 洛谷-乘积最大-NOIP2000提高组复赛
- luogu1017【2000提高】进制转换(数学)
- 【Luogu P2282】【JZOJ 4906】【NOIP2016提高组复赛】组合数问题 题解
- NOIP 2002 提高组 复赛 字串变换
- NOIP2014复赛提高组day1(A:生活大爆炸版石头剪刀布 B:联合权值 C:飞扬的小鸟)
- NOIP 2006 提高组 复赛 digital 2k 进制数
- 全国信息学奥林匹克联赛(NOIP2011)复赛 提高组 day2 T2 聪明的质监员
- NOIP2011 提高组 复赛 day1 mayan mayan游戏
- NOIP 2011 提高组 复赛 day2 factor 计算系数
- [NOIP提高组2000]乘积最大
- NOIP 2000 普及组 复赛 税收与补贴问题
- NOIP 2002 提高组 复赛 字串变换
- NOIP 2004 提高组 复赛 chorus 合唱队形
- luogu1018 NOIP2000提高 乘积最大
- NOIP 2008 提高组 复赛 message 传字条