1.輸出格式
輸出格式满力,注意浮點(diǎn)數(shù)和整型數(shù)據(jù)之間的區(qū)別戏罢。如果輸入是double型的數(shù)據(jù)則用long float表示,注意要用%lf表示脚囊。
printf("%.1f\n",8.0/5.0);//1.6
printf("%.2f\n",8.0/5.0);//1.60
printf("%lf\n",8.0/5.0);//1.600000
printf("%d\n",8.0/5.0);//-1717916918
printf("%d\n",8/5);//1
printf("%.1f\n",8/5);//0.0
圓柱體的表面積
輸入底面半徑r和高h(yuǎn)龟糕,輸出圓柱體的表面積,保留3位小數(shù)悔耘。
#include <stdio.h>
#include <math.h>
int main()
{
const double pi = 4.0 * atan(1.0);//tan(pi/4)=1,atan(1)=pi/4;
double r,h,s1,s2,s;
scanf("%lf%lf",&r,&h);
s1=pi*r*r;
s2=2*pi*r*h;
s=s1*2.0+s2;
printf("Area = %.3lf\n",s);
return 0;
}
三位數(shù)翻轉(zhuǎn)
輸出的語(yǔ)句格式分為輸不輸出百位的0讲岁。
#include <stdio.h>
#include <math.h>
int main()
{
int n,m;
scanf("%d",&n);
m = (n%10)*100 + (n/10 %10)*10 +n/100;
printf("%d\n",m);
printf("%03d\n",m);
return 0;
}
2.完全平方數(shù)
如何判斷開根號(hào)是否為整數(shù),用floor(x+0.5)==x來(lái)判斷衬以,其中floor(x+0.5)==1的區(qū)間是[0.5,1.5)缓艳,這樣是為了避免高精度誤差
#include <stdio.h>
#include <math.h>
int main()
{
int a,b,n;
double m;
for(a=1;a<=9;a++)
for(b=1;b<=9;b++)
{
n = a * 1100 + b* 11;
m = sqrt(n);
if(floor(m+0.5)==m) printf("%d\n", n);
}
return 0;
}
還是避免這種開根號(hào)吧,一個(gè)殘缺的循環(huán)用break來(lái)跳出循環(huán)
#include <stdio.h>
#include <math.h>
int main()
{
int x,n,hi,lo;
for(x=1;;x++)
{
n=x*x;
if(n<1000) continue;
if(n>9999) break;
hi = n/100;
lo = n%100;
if(hi/10==hi%10 && lo/10==lo%10) printf("%d\n", n);
}
return 0;
}
3.3n+1問(wèn)題
其實(shí)主要就是解決3n會(huì)乘法溢出的問(wèn)題看峻,當(dāng)然可以用大數(shù)乘法去做阶淘,但是太麻煩了,只要用unsigned long long 就行互妓,但是VC不支持溪窒。
#include<stdio.h>
#include<math.h>
int main()
{
unsigned __int64 n;
unsigned __int64 count=0ui64;
scanf("%I64u",&n);
while(1ui64<n)
{
if(n%2ui64==1ui64)
{
n=3ui64*n+1ui64;
}
else
{
n=n/2ui64;
}
count++;
if(n==1ui64) break;
}
printf("%I64u\n",count);
return 0;
}
4.階乘之和
乘法溢出問(wèn)題,注意到n>25之后結(jié)果不變...
#include<stdio.h>
#include<math.h>
int main()
{
const int MOD=1000000;
int i,j,n,S=0;
scanf("%d",&n);
if(n>25) n=25;
int fac = 1;
for(i=1;i<=n;i++)
{
fac = fac * i % MOD;
S = (S + fac) % MOD;
}
printf("%d\n",S);
return 0;
}
5.分?jǐn)?shù)化小數(shù)
注意這種輸出格式: printf("%.*lf\n",c,(double) a/b);
#include<stdio.h>
#include<math.h>
#define INF 1000000
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("%.*lf\n",c,(double) a/b);
return 0;
}
如果用正常的除法運(yùn)算去做
#include<stdio.h>
int main()
{
int i,a,b,c,tmp;
scanf("%d%d%d",&a,&b,&c);
//printf("%.*lf\n",c,(double)a/b);
printf("%d.",a/b);
for(i=1;i<=c;i++)
{
a = (a%b)*10;
if(i!=c)
printf("%d",a/b);
else
{
tmp = (a%b)*10;
if(tmp/b>=5)
printf("%d",a/b+1);
else printf("%d",a/b);
}
}
printf("\n");
return 0;
}
6.排列
1冯勉,2...9澈蚌,每個(gè)數(shù)字用一次組成三個(gè)三位數(shù),abc灼狰,def宛瞄,ghi,要求三個(gè)數(shù)之比為1:2:3交胚,輸出所有解份汗。
#include<stdio.h>
#include<math.h>
#define INF 1000000
int main()
{
int x,y,z,i,sum=0;
int a[10]={0};
for(x=100;x<1000;x++)
{
sum=0;
y = 2*x;
z = 3*x;
a[x/100 %10]=1;a[(x/10) %10]=1;a[x%10]=1;
a[y/100 %10]=1;a[(y/10) %10]=1;a[y%10]=1;
a[z/100 %10]=1;a[(z/10) %10]=1;a[z%10]=1;
for(i=1;i<10;i++)
{
sum += a[i];
a[i]=0;
}
if(sum==9) printf("%d %d %d\n",x,y,z);
}
return 0;
}