敲七问题
敲七问题,输出与7相关的数字,能被7整除或数字中有一位是7,并统计个数。
有逻辑上的错误,部分与7相关的数字不能输出,另外在输入一个N,运行结束,然后再输入一个两位数,为什么会输出两个“input again”????
#include<iostream>
using namespace std;
void main()
{
int i,a=0,N,t;
loop:
cout<<"请输入一个正整数N(N小于30000)。"<<endl;
cin>>N;
if(N>=30000||N<=0)
cout<<"输入有误,请重新输入!"<<endl;
for(i=1;i<=N;i++)
{
if(i%7==0)
{
cout<<i<<endl;
a++;
}
else
{
if(i%10==7)
{
cout<<i<<endl;
a++;
}
else
{
if(i/10-10*i/100==7)
{
cout<<i<<endl;
a++;
}
else
{
if(i/100-10*i/1000==7)
{
cout<<i<<endl;
a++;
}
else
if(i/1000-10*i/10000==7)
{
cout<<i<<endl;
a++;
}
}
}
}
}
cout<<"与7有关连的数有";
cout<<a;
cout<<"个"<<endl;
cout<<"1、退出;2、继续输入"<<endl;
cin>>t;
while(t!=1||t!=2)
{
cout<<"input again!"<<endl;
cin>>t;
}
switch(t)
{
case 1:exit(1);break;
case 2:goto loop;break;
}
}
[解决办法]
while(t!=1||t!=2)
{
cout<<"input again!"<<endl;
cin>>t;
}
这里错了~~
应该是:
while(t!=1&&t!=2)
{
cout<<"input again!"<<endl;
cin>>t;
}
注意||和&&的区别~~一个与,一个或,这里面应该用与啊~~
[解决办法]
#include<iostream>using namespace std;void main(){ int i,a=0,N,t,j; do { cout<<"请输入一个正整数N(N小于30000)。"<<endl; cin>>N; if(N>=30000||N<=0) cout<<"输入有误,请重新输入!"<<endl; for(i=1;i<=N;i++) { if(i%7==0) { cout<<i<<endl; a++; continue; } j=i; while(j>0) { if(j%10==7) { cout<<i<<endl; a++; break;; } j/=10; } } cout<<"与7有关连的数有"; cout<<a; cout<<"个"<<endl; cout<<"1、退出;2、继续输入"<<endl; cin>>t; while(t!=1&&t!=2) { cout<<"input again!"<<endl; cin>>t; } }while(t==2);}
[解决办法]
类似i/100-10*i/1000==7的可以修改一下,i/100不就是10*i/1000么,相减始终为0;另外,在后面的while循环,当t如何不为1且不为2才需要重新输入,不是“或”的关系。
#include<iostream>using namespace std;int main(){ int i,a=0,N,t;loop: cout<<"input a number between 1 and 30000:"; cin>>N; if(N>=30000||N<=0) { cout<<"error number,exit"<<endl; return 1; } for(i=1;i<=N;i++) { if(i%7==0) { cout<<i<<endl; a++; } else if(i%10==7) { cout<<i<<endl; a++; } else if(i/10-i/100==7) { cout<<i<<endl; a++; } else if(i/100-i/1000==7) { cout<<i<<endl; a++; } else if(i/1000-i/10000==7) { cout<<i<<endl; a++; } } cout<<"7 related number has:"<<a<<endl; cout<<"input:1-quite;2-continue"<<endl; cin>>t; while(t!=1 && t!=2) { cout<<"input again!"<<endl; cin>>t; } switch(t) { case 2: goto loop; } return 0;}
[解决办法]
1、部分与7相关的数字不能输出:
把你的if(i/10-10*i/100==7)
判断改成if(i/10-10*(i/100)==7)即可解决~~
2、另外在输入一个N,运行结束,然后再输入一个两位数,为什么会输出两个“input again”????
while(t!=1&&t!=2)
{
cout<<"input again!"<<endl;
cin>>t;
}
while里是与的关系~~不是或的关系~~
[解决办法]