计算f(n) = 1-1/2+1/3-1/4+…1/n
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
scanf("%d", &n);
double ret = 0.0; //注意这里是double
double sign = 1; //正负标志
for (int i=1; i<=n; i++) {
ret += sign/i;
sign = -sign;
}
printf("f(%d) = %f",n ,ret);
return 0;
}
整数分解
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num;
scanf("%d", &num);
int mask = 1;
int t = num;
while (t>9) {
t /= 10;
mask *= 10;
}
do {
int d = num / mask;
printf("%d ",d);
num %= mask;
mask /= 10;
}while ( mask > 0 );
return 0;
}
辗转相除法求gcd
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b;
scanf("%d %d", &a, &b);
while (b!=0) {
int t=a%b;
a=b;
b=t;
}
printf("最大公约数为:%d", a);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a;
scanf("%d", &a);
int cnt = 0;
for( int i=a ; i<a+4 ; i++ ) {
for ( int j=a ; j<a+4 ; j++ ) {
for (int k=a ; k<a+4 ; k++ ) {
if (i!=j && i!=k && j!=k) {
printf("%d%d%d", i,j,k);
cnt ++;
if (cnt == 6) {
printf("\n");
cnt = 0;
}else {
printf(" ");
}
}
}
}
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
scanf("%d", &n);
int max = 1;
int t = n;
while (t>0) {
t--;
max*= 10;
}
int min = max/10 ;
//printf("min=%d,max=%d",min,max);
for ( int x=min ; x<max ; x++ ){
int y = x;
int ret = 0;
while (y>0) {
int d = y%10;
y /= 10;
int mi = d;
for (int i=1 ; i<n ; i++) {
mi *= d;
}
ret += mi;
}
if (ret==x) {
printf("%d\n", x);
}
}
return 0;
}
如果变量之后要被用到的话,用一个新的变量记录它。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
scanf("%d", &n);
for (int j=1 ; j<=n ; j++) {
for (int i=1 ; i<=j ; i++) {
printf("%d*%d=%d",i,j,i*j);
if (i==j) {
printf("\n");
}else if (i*j<10) {
printf(" ");
}else {
printf(" ");
}
}
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int M,N;
scanf("%d %d", &M, &N);
int sum=0;
int con=0;
for (int x=M ; x<=N ; x++) {
int exit=0;
for (int i=2 ; i<x ; i++) {
if (x%i==0) {
exit = 1;
break;
}
}
if (exit==0) {
con++;
sum += x;
}
}
printf("%d %d",con,sum);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num,n;
scanf("%d %d", &num, &n);
int cnt=0;
int guess;
//scanf("%d", &guess);
//cnt++;
do {
scanf("%d", &guess);
cnt++;
if (guess>num) {
printf("Too big\n");
}else if (guess<num) {
printf("Too small\n");
}
}while (guess!=num && guess>=0 && cnt<n);
//printf("%d", cnt);
if (cnt==1) {
printf("Bingo!");
}else if (cnt<=3) {
printf("Lucky You!");
}else if (cnt<=n) {
printf("Good Guess!");
}else {
printf("Game over");
}
return 0;
}
do while中放的是循环成立的条件。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
scanf("%d", &n);
double fenzi=2;
double fenmu=1;
double sum=1.0*fenzi/fenmu;
int cnt=1;
while (cnt<n) {
double t = fenzi;
fenzi += fenmu;
fenmu = t;
//printf("fenzi=%d,fenmu=%d\n",fenzi,fenmu);
sum += 1.0*fenzi/fenmu;
//printf("%f",sum);
cnt++;
}
printf("%.2f\n",sum);
return 0;
}
这里的fenzi fenmu t 用 double 而不用 int !!
虽然分子分母都是整数,但是随着n的增大,分子分母可能会很大,如果超过整数在计算机里的范围,会变成负数,造成错误。