HDU2007平方和与立方和
注意题目没说明n与m的大小关系
因此一定要先进行判断!!
while(cin>>n>>m)
{
if(n>m)
{
tmp=m;
m=n;
n=tmp;
}
s1=0;s2=0;
for(int i=n;i<=m;i++)
{
if(i%2!=0)
{
s1+=i*i*i;
}
else
{
s2+=i*i;
}
}
但如果我们在vscode中使用pow()
for(int i=n;i<=m;i++)
{
if(i%2!=0)
{
s1+=pow(i,3);
}
else
{
s2+=pow(i,2);
}
}
如图输出的是151而不是152
但如果在dev上运行并没有这个问题
可能是由于编译器的差异
用floor()处理就好了
HDU2011多项式求和
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int m,n;
cin>>m;
while(m--)
{
double s=0;
cin>>n;
for(double i=1;i<=n;i++)
{
double t=0;
t=pow(-1,i-1)*(1/i);
s+=t;
}
printf("%.2f\n",s);
}
return 0;
}
错误示范: i为int型 即使s为double型 1/i仍是int型导致精度丢失
修改后 i为double型 1/i就为double型
注意i%2前的(int)!
C语言把类型名视为一元运算符
例如 (float) dividend / divisor
解释为 ((float) dividend) / divisor
后一种是用t保存每一项再与s相加
另一种是直接-=和+=
如果想cout输出时保留两位小数
cout<<fixed<<setprecision(2)<<s<<endl;
C++中用fixed以及setprecision 设置输出精度
HDU2008数值统计
要求输入n=0表示输入结束
用while时 加上if(n==0)break就好了
(之前有道题不管0能AC这个却不行…)
HDU2012素数判定
写过很多次的题
重点是注意发现素数马上跳出两个循环直接判断
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int x,y,s,flag,t;
while(cin>>x>>y)
{
if(x==0&&y==0) break;
s=0;flag=-1;t=0;
for(int n=x;n<=y;n++)
{
s=n*n+n+41;
t=sqrt(s);
for(int i=2;i<=t;i++)
{
if(s%i==0)
{flag=0; break;}//发现素数马上break!
else flag=1;
}
if(flag==0) break;//这个break也千万不要漏了!
}
if(flag==0) cout<<"Sorry"<<endl;
else cout<<"OK"<<endl;
}
return 0;
}
其他一些小问题
①while和for写完条件后不要; 否则会造成空语句!
②for(表达式1;表达式2;表达式3)语句
等同于
表达式1
while(表达式2){
语句
表达式3:;
}
所以for的表达式3 i–和--i效果是一样的