一:杭电原题摘录
http://acm.hdu.edu.cn/game/entry/problem/show.php?chapterid=1§ionid=2&problemid=24
二.题目分析
进制转换.此题重点在于将一个十进制数转换为十二,十六进制.如果我们以前做过转二进制,那么一定记得辗转相除.也就好解决了.还有一个问题就是该数的范围,如果取错,很可能会出现超时问题.这个时候,就要善于观察输出结果.
三.我的收获
进制转换的辗转相除和取余
最后当然就是善于观察输入输出结果,特别是无输入的时候,这个时候输出结果就显得很重要了.
四.AC代码
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
int n;
for(n=2992;n<10000;n++)
{
int sum1=0,sum2=0,sum3=0;
//cout<<"----"<<endl;
//十进制
sum1=(n/1000)+(n/100%10)+(n/10%10)+(n%10);
//cout<<"sum1:"<<sum1<<endl;
//16进制
int b[4],j,m;
m=n;
for(j=0;j<4;j++){
b[j]=m%16;
m=m/16;
if(m==0) {
break;}
}
for(j=0;j<4;j++){
sum2+=b[j];
}
//cout<<"sum2:"<<sum2<<endl;
//十二进制
int a[4],i,p;
p=n;
for(i=0;i<4;i++){
a[i]=p%12;
p=p/12;
if(p==0) break;
}
for(i=0;i<4;i++){
sum3+=a[i];
}
//cout<<"sum3:"<<sum3<<endl;
if(sum1==sum2&&sum2==sum3){
cout<<n<<endl;
}
}
return 0;
}