一共三道题,题目要求代码上方已经注释
/*
P26 上机实验题1
1.1设计一个程序,输出所有小于等于n(n为一个大于2的正整数)的素数。
要求:①每行输出10个素数 ②尽可能采用较优算法
1.2编写一个程序,计算任意一输入的正整数的各位数字之和,并分析算法时间复杂度。
1.3编写一个程序,判断一个字符串是否为“回文”,并分析算法时间复杂度。
*/
//1.1
#include <iostream>
#include <iomanip>
using namespace std;
bool isprim[10001];
void cal_prim(void)
{
int i,j;
isprim[0]=1;
isprim[1]=1;
isprim[2]=0;
i=2;
while(i<=10001)
{
if(!isprim[i])
for(j=i+i;j<=10001;j+=i)
isprim[j]=1;
++i;
}
}
int main()
{
int n,i,j;
cal_prim();
j=0;
while(cin>>n)
{
cout<<"The Prim from 1 to "<<n<<" is:"<<endl;
for(i=1;i<=n;++i)
{
if(isprim[i]==0)
{
++j;
cout<<setiosflags(ios::fixed)<<setw(5)<<i<<" ";
if(j%10==0 && j!=0) cout<<endl;
}
}
cout<<endl;
}
return 0;
}
//1.2 复杂度O(log10(n))
#include <iostream>
using namespace std;
int main()
{
int num,sum,temp;
while(cin>>num)
{
sum=0;
temp=num;
while(temp>0)
{
sum+=temp%10;
temp/=10;
}
cout<<num<<"的各位数字之和为:"<<sum<<endl;
}
return 0;
}
//1.3,复杂度 O(n)
#include <iostream>
#include <string>
using namespace std;
bool judge(string str,int len)
{
int i,j;
i=0;
j=len-1;
if(len%2==0)
{
for(;i<=len/2-1;++i,--j)
if(str[i]!=str[j])
return 0;
return 1;
}
else
{
int medium=len/2;
for(;i<=medium;++i,--j)
if(str[i]!=str[j])
return 0;
return 1;
}
}
int main()
{
string str;
int len;
while(cin>>str)
{
len=str.length();
if(judge(str,len)) cout<<str<<"是回文串!"<<endl;
else cout<<str<<"不是回文串!"<<endl;
}
return 0;
}