c++两个自然数(输入的十进制数转换为二进制时,两个数的位数相同。) 输出:有效则有效,无效则无效
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++两个自然数(输入的十进制数转换为二进制时,两个数的位数相同。) 输出:有效则有效,无效则无效相关的知识,希望对你有一定的参考价值。
取两个自然数(十进制)并检查信息是否有效。系统将自然数(十进制)转换为二进制数,检查每一位是否相等或不同。 例如,如果两个自然数是 10 和 12,则 10 是二进制 1010,12 是 1100。由于 1010 和 1100 的第一和第四位相同,因此无效。
再举一个例子,如果两个自然数是 10 和 5,则 10 是二进制的 1010,而 5 是二进制的 0101。这是有效的,因为 1010 和 0101 中的所有位都不相等。
输入:两个自然数(输入的数转换为二进制时,两个数的位数相同。) 输出:有效则有效,无效则无效
例: 10 12
输出:无效
10 5
有效
#include<iostream>
using namespace std;
int main()
int a, b;
cin >> a>>b;
if(b==(~a & b))
cout<<"有效"<<endl;
else
cout<<"无效"<<endl;
return 0;
追问
是输入十进制的数,程序把这两个十进制的数转换成二进制的数,然后比对这两个二进制的每一位数,有相同的位置的数一样,无效,没有相同的话,则有效
追答这个就是输入十进制数,数在内存中就是二进制,还转换啥?
追问不太准确啊
我写错了,是b==(~a & b)
参考技术A 可以写一个统计一个数的二进制位数的函数。统计出两个自然数中大数的二进制位数为k位,在判断两数之和是否等于2的k次方减1,如果相等,则输出有效,不相等则输出无效。C++ 十进制数转换成任意进制数
#include<iostream>
using namespace std;
const int StackSize=1024;
class Seqstack
public:
Seqstack()top=-1;//构造函数,初始化空栈
void Push(int x);//入栈
int Pop();//出栈
bool Empty();//判别栈是否为空
void Trans(int Num,int N);//函数功能:将十进制的数Num转换为N进制
private:
int data[StackSize];//定义数组
int top;//栈顶指针
;
void Seqstack::Push(int x)
if(top>=StackSize-1)throw"上溢";
top++;
data[top]=x;
int Seqstack::Pop()
if(Empty())throw"下溢";
top--;
return data[top+1];
bool Seqstack::Empty()
if(top==-1)return 1;
else return 0;
void Seqstack::Trans(int Num, int N)
int k;
while(Num)
k=Num%N;
Push(k);
Num=Num/N;
while(!Empty())
k=Pop();
if(k<10)cout<<k;
else cout<<char(k+55);
void main()
int Num,N;
Seqstack s;
cout<<"将十进制数Num转换成N进制输出,请输入Num,N"<<endl;
cin>>Num>>N;
while(Num)
s.Trans(Num,N);
不知道哪里条件设置出现问题了,菜鸟求大神指点= =
s.Trans(Num,N);
主函数里面这句
为什么要用while呢?
Num数值并没有传回,也就是Num没变,这个死循环了
如果想Trans里面的值传回 用int &Num做参数
void Trans(int &Num,int N);//函数功能:将十进制的数Num转换为N进制
不过觉得没比要的
退出这个函数的时候,Num肯定是0了,传回来没意义
你把这个while去掉 直接调
s.Trans(Num,N);
应该就ok了追问
我去掉了while,直接调用也还是死循环,是不是Trans这个函数有问题?
追答怎么会呢
我这边测试是好的
我的完整程序
你看下和你的有什么区别
我印象中只改了IDE相关头文件和注释while
#include<iostream>using namespace std;
const int StackSize=1024;
class Seqstack
public:
Seqstack()top=-1;//构造函数,初始化空栈
void Push(int x);//入栈
int Pop();//出栈
bool Empty();//判别栈是否为空
void Trans(int Num,int N);//函数功能:将十进制的数Num转换为N进制
private:
int data[StackSize];//定义数组
int top;//栈顶指针
;
void Seqstack::Push(int x)
if(top>=StackSize-1)throw"上溢";
top++;
data[top]=x;
int Seqstack::Pop()
if(Empty())throw"下溢";
top--;
return data[top+1];
bool Seqstack::Empty()
if(top==-1)return 1;
else return 0;
void Seqstack::Trans(int Num, int N)
int k;
while(Num)
k=Num%N;
Push(k);
Num=Num/N;
while(!Empty())
k=Pop();
if(k<10)cout<<k;
else cout<<char(k+55);
int main()
int Num,N;
Seqstack s;
cout<<"将十进制数Num转换成N进制输出,请输入Num,N"<<endl;
cin>>Num>>N;
// while(Num)
s.Trans(Num,N);
运行结果
$g++ bd.c -o 1 -Wall
$./1
将十进制数Num转换成N进制输出,请输入Num,N
100 2
1100100
$./1
将十进制数Num转换成N进制输出,请输入Num,N
100 16
64
$./1
将十进制数Num转换成N进制输出,请输入Num,N
100 8
144
追问我的版本是VS2005,代码完全一样的,输出的数值是对的,但是就是无限循环的重复输出,没有终止
追答还有这样的事情 你确定编译运行的是修改后的文件吗?
几个方式你可以试一下
在原来代码基础上 Trans 结尾加一个打印信息,看是否退出了Trans
在这个打印后 加一个exit(0)或者while(1) 强制程序停在这里
如果还没效果 依旧死循环 那么只能猜是环境问题了
不过 强烈怀疑你没有执行修改后的代码,而是一直运行的之前的
参考技术A 你的代码,真的太复杂了你看看我的,多组数据,十进制n转换r进制
#include<stdio.h>
int main()
int n,r,a[1000],t,f;
while(scanf("%d%d",&n,&r)==2)
t=-1;f=0;
if(n==0)printf("0\n");
else
if(n<0)f=1,n=-1*n;
while(n!=0)a[++t]=n%r;n/=r;
if(f==1)printf("-");
while(t>=0)
if(a[t]>=10)printf("%c",a[t]-10+'A');
else printf("%d",a[t]);t--;
printf("\n");
短吧,望采纳 参考技术B 觉得你写复杂了,提供一个作参考……
//#include "stdafx.h"//vc++6.0加上这一行.
#include "string.h"
#include "iomanip.h"
void Itob(int n,char s[],int b)
char cx,i;
for(i=0;;i++)
cx=n%b;
s[i]=cx+(cx>=0 && cx<=9 ? '0' : 0x37);
n/=b;
if(n==0 && cx==0) break;
s[i]=NULL;
strcat(s,b==2 ? ")B(" : b==8 ? "O" : b==16 ? "x0" : "");
strrev(s);
void main(void)
char p[20];
int n,b;
cout << "请输入一个十进制整数...\nn=";
cin >> n;
cout << "请输入要转换成的进制数(2~16)...\nb=";
cin >> b;
Itob(n,p,b);
cout << "输入的十进制数是 " << n << ".\n" << "转换成 " << b << " 进制是 " << p << ".\n";
参考技术C 兄弟,你这个程序不太现实啊,你要是想用个1000进制数输出,你上哪找那么多字母表示1000进制的一个位上的数?追问
主要用来测试2,8,16的,不要在意那些细节= =
追答//不知道第一次提交为什么没成功。。。。。。。#include <stdio.h>
void print(int n)
if(n>-1&&n<10)
printf("%c",'0'+n);
else if(n<36)
printf("%c",'a'+n-10);
void trans(int n,int k)//你是要转换的数,k是进制
if(n>0)
trans(n/k,k);
print(n%k);
void main()
trans(355,16);
以上是关于c++两个自然数(输入的十进制数转换为二进制时,两个数的位数相同。) 输出:有效则有效,无效则无效的主要内容,如果未能解决你的问题,请参考以下文章