HDU1196 Lowest Bit
题目
题目分析
题目大意:输入一个数字,将其转化为二进制后,输出右边第一个1与之后的0所组成的十进制数字。
解题思路:用取模的方法将数字转化为二进制存储在数组中,然后找到从低位开始的第一个1,计算2的多少次幂即可。
代码实现
#include<iostream>
using namespace std;
int main()
{
int bin[50];
int a;
while(cin>>a&&a)
{
int i=0;
while(a)
{
bin[i++]=a%2;
a/=2;
}
if(bin[0])
cout<<1<<endl;
else
{
int j=0;
int ans=1;
while(bin[j]!=1&&j<i)
{
ans*=2;
++j;//循环控制变量!!!
}
cout<<ans<<endl;
}
}
return 0;
}
HDU1197 Specialized Four-Digit Numbers
题目
HDU1197 Specialized Four-Digit Numbers
题目分析
题目大意:输出用十进制、十二进制、十六进制表示的各个位数之和相等的四位数。
解题思路:跟上题转化为二进制一样,也是用循环取模的方法(详见代码),这个不用存起来,只计算各个位上的数字之和即可。
代码实现
#include<iostream>
using namespace std;
int main()
{
int s10,s12,s16;
int a,b,c;
for(int i=1000; i<=9999; ++i)
{
s10=0;
s12=0;
s16=0;
a=i;
b=i;
c=i;
while(a)
{
s10=s10+a%10;
a/=10;
}
while(b)
{
s12=s12+b%12;
b/=12;
}
if(s10!=s12)
continue;
while(c)
{
s16=s16+c%16;
c/=16;
}
if(s10!=s16)
continue;
cout<<i<<endl;
}
return 0;
}