c++帮我看看程序哪里错了我那sqrt通不过编译

来源:百度知道 编辑:UC知道 时间:2024/07/02 09:24:45
#include<iostream>
#include<cmath>
using namespace std;
int main(){
for(int n;cin>>n&&n;){
for(int i=sqrt(n);i>1;i--)
for(int j=1;j<=32;j++)
if(n==pow(i,j)
{cout<<i<<" "<<j<<"\n";continue;}
else cout<<o<<' '<<0<<"\n";
}
}//题目是输出n可以表示成哪两个数的幂次方

就这个程序本身而言,有两处错误:
1、if(n==pow(i,j)
后面少写了个括号。
2、else cout<<o<<' '<<0<<"\n";
那个o应该是n吧?那个0应该是1吧?

改成:
#include<iostream>
#include<cmath>
using namespace std;
int main(){
for(int n;cin>>n&&n;){
for(int i=sqrt(n);i>1;i--)
for(int j=1;j<=32;j++)
if(n==pow(i,j))
{cout<<i<<" "<<j<<"\n";continue;}
else cout<<0<<' '<<0<<"\n";
}
}

但是就问题而言,这个程序还是错的!
因为那个循环使得
if(n==pow(i,j)
{cout<<i<<" "<<j<<"\n";continue;}
else cout<<o<<' '<<0<<"\n";
}
中的else cout<<o<<' '<<0<<"\n"; 会执行很多遍。但我们知道,只要执行一次就好了:

改成这样应该就是楼主想要的了:
#include<iostream>
#incl