问题 D: 十进制转N进制
题目描述
十进制数转N进制数。
样例输入 Copy
3 2
样例输出 Copy
11
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main()
{
char a[100]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
string s;
int n,t,k=0;
cin>>n>>k;
if(n==0)cout<<0;
else
{
while(n)
{
t=n%k;
s+=a[t];
n/=k;
}
reverse(s.begin(),s.end());
cout<
问题 E: 十进制小数转N进制
题目描述
十进制小数x转为N进制数。转换的方法是“乘N顺序取整。”例如x=0.8125 ,N=8,输出0.64。(保证小数<1,转化后的小数可用精确位为20位)
样例输入 Copy
0.8125 8
样例输出 Copy
0.64
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main()
{
float x;
int n,k=0;
cin>>x>>n;
cout<<"0.";
while(x!=0)
{ x=x*n;
cout<<(int)x;
int y=(int)x;
x=x-y;
k++;
if(k==20)break;
}
}
问题 F: N进制转换为十进制
题目描述
N进制整数转换为十进制
输出
样例输入 Copy
2 11
样例输出 Copy
3
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
long long n,s=0;
int main()
{
string x;
cin>>n>>x;
int k=0;
for(int i=x.size()-1 ;i>=0;i--)
{
char t=x[i];
if(isdigit(t))
s=s+(t-'0')*pow(n,k++);
else
s+=(t-'A'+10)*pow(n,k++);
}
cout<
问题 G: N进制小数转十进制
题目描述
输入N进制小数,转十进制
样例输入 Copy
2 0.111
样例输出 Copy
0.875
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
long long n;
float s=0;
int main()
{
string x;
cin>>n>>x;
int k=-1;
for(int i=2 ;i
问题 H: N进制数加法
题目描述
N(N<37)进制数加法运算问题,即从键盘输入一个小于37的正整数N,再输入符合要求的两个N进制数,求两者之和,输出结果仍为N进制数。
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
long long n;
int s=0;
int main()
{
string x,y,c;
cin>>n;
cin>>x>>y;
int k=0;
reverse(x.begin() ,x.end() );
reverse(y.begin() ,y.end() );
int x1;
x1=max(x.size() ,y.size() );
int f=0;
for(int i=0;i=y.size() )
{
if(isdigit(x[i]))
s=x[i]-48;
else
s=x[i]-'A'+10;
}
else
if(i=x.size() )
{
if(isdigit(y[i]))
s=y[i]-48;
else
s=y[i]-'A'+10;
}
if(s+f>=n)
{
if(s-n+f<10)
c[k++]=s-n+f+48;
else
c[k++]=s-n+'A'-10+f;
f=1;
}
else
{
if(s<10)
c[k++]=s+'0'+f;
else
c[k++]=s+'0'+f-'A'+10;
f=0;
}
}
c[k++]=f+48;
if(c[k-1]!='0')printf("%c",c[k-1]);
for(int i=k-2;i>=0;i--)
{
printf("%c",c[i]);
}
问题 I: 二进制分类
题目描述
若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数。
例如:
(13)10=(1101)2,其中1的个数为3,0的个数为1,则称此数为A类数;
(10)10=(1010)2,其中1的个数为2,0的个数也为2,称此数为B类数;
(24)10=(11000)2,其中1的个数为2,0的个数为3,则称此数为B类数;
程序要求:求出a~b之中全部A、B两类数的个数。
输入
两个整数,即a和b。
输出
一行,包含两个整数,分别是A类数和B类数的个数,中间用单个空格隔开。
样例输入 Copy
1 1000
样例输出 Copy
538 462
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
long long n;
int s=0;
int main()
{
long long a,a1=0,b1=0,b,a2=0,b2=0;
cin>>a>>b;
for(int i=a;i<=b;i++)
{
int k;
a1=0;
b1=0;
int j=i;
while(j)
{
k=j%2;
if(k==1)
a1++;
else
b1++;
j/=2;
}
if(a1>b1)a2++;
else
b2++;
}
cout<
问题 K: K进制转L进制
题目描述
输入K进制的正整数N,将之转为L进制后输出(N<1000000;L,K<=16)有多组数据。
输入
三个整数K,N,L
输出
输出N的L进制数。
样例输入 Copy
8 10 2
10 10 16
样例输出 Copy
1000
A
思路:先转10进制再转L进制
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
# include
# include
# include
# include
# include
# include
# include
# include
# include