求高手帮忙解决下面这个C++中的一个题目。看俺的代码哪里有错,谢谢了
题目:对于一个个位数是7的自然数N,把他的个位数移到最高位,其余均向右移动一位,得到的新数是原数的T倍。现给出这个倍数T,求满足条件的最小的个位数是7的自然数N,若在[1...
题目:对于一个个位数是7的自然数N,把他的个位数移到最高位,其余均向右移动一位,得到的新数是原数的T倍。现给出这个倍数T,求满足条件的最小的个位数是7的自然数N,若在[1,1000000]的范围内没有找到N,则输出“No“
下面是我写的代码:#include<iostream>
using namespace std;
int change(int n){
int m;
while(n>0){
m=n%10;
n/=10;} //求出个位数
int p=n/10; //求出除去个位数后得到的数
while(n>=10){
m=m*10;
n/=10;} //将个位数移到最高位
int q=m+p; //得出最后得到的数
return q;}
int main()
{
int T,a,b;
while(cin>>T){
int find=false;
for(int i=0;i<=99999;i++){
a=i*10+7;
b=change(a);
if(b/a==T){cout<<a<<endl;find=true;break;}}
if(!find)cout<<"No"<<endl;}
return 0;
}
我怀疑预处理函数出了问题,跪求高手指点 展开
下面是我写的代码:#include<iostream>
using namespace std;
int change(int n){
int m;
while(n>0){
m=n%10;
n/=10;} //求出个位数
int p=n/10; //求出除去个位数后得到的数
while(n>=10){
m=m*10;
n/=10;} //将个位数移到最高位
int q=m+p; //得出最后得到的数
return q;}
int main()
{
int T,a,b;
while(cin>>T){
int find=false;
for(int i=0;i<=99999;i++){
a=i*10+7;
b=change(a);
if(b/a==T){cout<<a<<endl;find=true;break;}}
if(!find)cout<<"No"<<endl;}
return 0;
}
我怀疑预处理函数出了问题,跪求高手指点 展开
展开全部
你有几个地方有错误:
1.求个位数,直接用n%10就可以了,你那样子是求的最高位的值
2.既然你已经定了个位为7,直接给m赋7就可以了吧。
3.你上面那样子算的时候,最后退出第一个while循环的时候,n是为0的,下面不能用这个n计算,你若是不断的用n/=10,开始应该用个变量保存这个n的值
4.还有在main中,不能单单不断b/a==T ,因为整数出的时候,若是不能整除,是会四舍五入的
5.这个题目其实最好的办法是你用数学推导的办法来计算,你自己可以推推,不用穷举的
#include<iostream>
using namespace std;
int change(int n)
{
int m;
m = 7;
int p = n / 10; //求出除去个位数后得到的数
while (n >= 10)
{
m = m * 10;
n /= 10;
} //将个位数移到最高位
int q = m + p; //得出最后得到的数
return q;
}
int main()
{
int T, a, b;
while (cin >> T)
{
int find = false;
for (int i = 0; i <= 99999; i++)
{
a = i * 10 + 7;
b = change(a);
if(b%a==0 && (b/a) == T)
{
cout << a << endl;
find = true;
break;
}
}
if (!find)
cout << "No" << endl;
}
return 0;
}
1.求个位数,直接用n%10就可以了,你那样子是求的最高位的值
2.既然你已经定了个位为7,直接给m赋7就可以了吧。
3.你上面那样子算的时候,最后退出第一个while循环的时候,n是为0的,下面不能用这个n计算,你若是不断的用n/=10,开始应该用个变量保存这个n的值
4.还有在main中,不能单单不断b/a==T ,因为整数出的时候,若是不能整除,是会四舍五入的
5.这个题目其实最好的办法是你用数学推导的办法来计算,你自己可以推推,不用穷举的
#include<iostream>
using namespace std;
int change(int n)
{
int m;
m = 7;
int p = n / 10; //求出除去个位数后得到的数
while (n >= 10)
{
m = m * 10;
n /= 10;
} //将个位数移到最高位
int q = m + p; //得出最后得到的数
return q;
}
int main()
{
int T, a, b;
while (cin >> T)
{
int find = false;
for (int i = 0; i <= 99999; i++)
{
a = i * 10 + 7;
b = change(a);
if(b%a==0 && (b/a) == T)
{
cout << a << endl;
find = true;
break;
}
}
if (!find)
cout << "No" << endl;
}
return 0;
}
展开全部
#include<iostream>
using namespace std;
int change(int n){
int m;
m=n%10; //求出个位数
int p=n/10; //求出除去个位数后得到的数
while(n>=10){
m=m*10;
n/=10;} //将个位数移到最高位
int q=m+p; //得出最后得到的数
cout<<q<<endl;
return q;}
int main()
{
int T,a,b;
while(cin>>T){
int find=false;
for(int i=0;i<=99999;i++){
a=i*10+7;
b=change(a);
if(b/a==T){cout<<a<<endl;find=true;break;}
}
if(!find)cout<<"No"<<endl;
}
return 0;
}
using namespace std;
int change(int n){
int m;
m=n%10; //求出个位数
int p=n/10; //求出除去个位数后得到的数
while(n>=10){
m=m*10;
n/=10;} //将个位数移到最高位
int q=m+p; //得出最后得到的数
cout<<q<<endl;
return q;}
int main()
{
int T,a,b;
while(cin>>T){
int find=false;
for(int i=0;i<=99999;i++){
a=i*10+7;
b=change(a);
if(b/a==T){cout<<a<<endl;find=true;break;}
}
if(!find)cout<<"No"<<endl;
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上回答的很好了,就有一点,整数除以整数不是四舍五入,而是取整,即只会舍,不会入。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你在循环里将n的值改变了。试一下这个:
int change(int n){
int m=n%10;
//求出个位数
int p=n/10; //求出除去个位数后得到的数
n=p;
while(n>0){
m=m*10;
n/=10;} //将个位数移到最高位
int q=m+p; //得出最后得到的数
return q;}
int change(int n){
int m=n%10;
//求出个位数
int p=n/10; //求出除去个位数后得到的数
n=p;
while(n>0){
m=m*10;
n/=10;} //将个位数移到最高位
int q=m+p; //得出最后得到的数
return q;}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询