C++ 程序设计教程(钱能)第3章的问题?

wq19840731 2004-04-14 03:44:32
#include <iostream>
using namespace std;

int main()
{
int a;
cout <<"please input a number:\n";
cin >>a;

int c1 = a%3 ==0; //==0什么意思?
int c2 = a%5 ==0;
int c3 = a%7 ==0;

switch((c1<<2)+(c2<<1)+c3){ //什么意思?
case 0: cout <<"不能被3,5,7整除.\n"; break;
case 1: cout <<"只能被7整除.\n"; break;
case 2: cout <<"只能被5整除.\n"; break;
case 3: cout <<"可以被5,7整除.\n"; break;
case 4: cout <<"只能被3整除.\n"; break;
case 5: cout <<"可以被3,7整除.\n"; break;
case 6: cout <<"可以被3,5整除.\n"; break;
case 7: cout <<"可以被3,5,7整除.\n"; break;
}
return 0;
}

麻烦各位了!
...全文
49 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
iwdc 2004-08-05
  • 打赏
  • 举报
回复
/*------------------------------------------------------------------------------
------------ 推荐一种最笨的方法-----------------
--------------------------------------------------------------------------------/


#include<iostream.h>

void main(){
int n;
cout<<"输入一个整数以做判断"<<'\n';
cin>>n;

if((n%3==0)&&(n%5==0)&&(n%7==0))
cout<<"能被三个数整除"<<'\n';
else if((n%3==0)&&(n%5==0))
cout<<"可同时被5和3整除"<<'\n';
else if((n%3==0)&&(n%7==0))
cout<<"可同时被3和7整除"<<'\n';
else if((n%5==0)&&(n%7==0))
cout<<"可同时被5和7整除"<<'\n';
else if(n%3==0)
cout<<"只能被3整除"<<'\n';
else if(n%5==0)
cout<<"只能被5整除"<<'\n';

else if(n%7==0)
cout<<"只能被7整除"<<'\n';
else
cout<<"不能被任一个整除"<<'\n';


}
wq19840731 2004-04-14
  • 打赏
  • 举报
回复
懂了
(c1<<2)+(c2<<1)+c3 //不过这么写是不是有点牵强?
newegg2002 2004-04-14
  • 打赏
  • 举报
回复
int c1 = a%3 ==0;
int c2 = a%5 ==0;
int c3 = a%7 ==0;
//什么意思?
写成这样:
int c1 = (a%3 ==0);
int c2 = (a%5 ==0);
int c3 = (a%7 ==0);
也就是说,当c1用来表示是否能被3整除,若c为1,则说明输入的数a对3求余为0,即能被3整除,否则则不能,其余同理,
switch((c1<<2)+(c2<<1)+c3)
因为c1,c2,c3取值均在0,1之间,所以(c1<<2)+(c2<<1)+c3恰好表示了由三者构成的三位二进制数,表示了八种不同的状态,就像
case 3:
就等价于 case 011:后两位为1,那么当然是能被5,7整除了,
caoyongang 2004-04-14
  • 打赏
  • 举报
回复
switch((c1<<2)+(c2<<1)+c3)

等价于

switch((c1*2*2)+(c2*2)+c3)
happlyman 2004-04-14
  • 打赏
  • 举报
回复
对,知道了,如楼上所说,<<是位移操作符,我记错了,以为<是位移操作符呢
pigja 2004-04-14
  • 打赏
  • 举报
回复
int c1 = a%3 ==0; //==0什么意思?
把a%3==0得到的值赋给c1,如果a%3==0,c1=1;如果a%3!=0,c1=0。

switch((c1<<2)+(c2<<1)+c3){ //什么意思?
c1左移两位的值 + c2左移一位的值 + c3。
happlyman 2004-04-14
  • 打赏
  • 举报
回复
int c1 = a%3 ==0; //==0什么意思?
int c2 = a%5 ==0;
int c3 = a%7 ==0;
意思是把a除3是不是能整除的结果放入c1中,如果能整除哪c1的值是非0,否则就是0
switch((c1<<2)+(c2<<1)+c3) //这是什么呀,我也不知道了
peter9606 2004-04-14
  • 打赏
  • 举报
回复
int c1 = a%3 ==0;

等价于
int c1 = (a%3 == 0) ;
~~~~~~~~~~~判断是否相等的结果赋给c1

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧