int n;
scanf("%d",&n);
int fact = 1;
int i = 1;
while ( i <= n ){
fact *= i;
i++;
}
printf("%d!=%d\n",n,fact);
用for循环表示:
for循环后大括号内三个条件(初始动作;循环继续的条件;循环每轮要做的动作)
int n;
scanf("%d",&n);
int fact = 1;
int i = 1;
for ( i=1; i<=n; i++ ){
fact *= i;
}
printf("%d!=%d\n",n,fact);
离开多重循环:
例子 凑硬币
#include <stdio.h>
int main()
{
int x;
int one,two,five;
scanf("%d",&x);
for( one = 1; one < x*10; one++){
for( two = 1; two < x*10/2; two++){
for( five = 1; five < x*10/5; five++){
if( one + two*2 + five*5 == x*10){
printf("可以用%d个1角加%d个5角得到%d元\n",
one, two, five, x);
}
}
}
}
return 0;
}
加入break
若要出现一种可能改为:
#include <stdio.h>
int main()
{
int x;
int one,two,five;
int exit = 0;
scanf("%d",&x);
for( one = 1; one < x*10; one++){
for( two = 1; two < x*10/2; two++){
for( five = 1; five < x*10/5; five++){
if( one + two*2 + five*5 == x*10){
printf("可以用%d个1角加%d个5角得到%d元\n",
one, two, five, x);
exit = 1;
break;
}
}
if ( exit ==1) break;
}
if ( exit ==1 ) break;
}
return 0;
}
也可运用goto out; out:
#include <stdio.h>
int main()
{
int x;
int one,two,five;
int exit = 0;
scanf("%d",&x);
for( one = 1; one < x*10; one++){
for( two = 1; two < x*10/2; two++){
for( five = 1; five < x*10/5; five++){
if( one + two*2 + five*5 == x*10){
printf("可以用%d个1角加%d个5角得到%d元\n",
one, two, five, x);
goto out;
}
}
}
}
out:
return 0;
}
100以内的素数
#include <stdio.h>
int main()
{
int x;
for ( x=1; x<=100; x++){
int i;
int isPrime = 1; // x是素数
for ( i=2;i<x;i++){
if( x % i == 0){
isPrime = 0;
break;
}
}
if ( isPrime == 1){
printf("%d ",x);
}
}
return 0;
}
50个素数
#include <stdio.h>
int main()
{
int x;
int cnt = 0;//
for ( x=1; cnt<50; x++){
int i;
int isPrime = 1; // x是素数
for ( i=2;i<x;i++){
if( x % i == 0){
isPrime = 0;
break;
}
}
if ( isPrime == 1){
cnt++;
printf("%d\t ",x); //加个\t让数字对齐
if ( cnt %5 == 0){ //令50个素数排成5个一行
printf("\n");
}
}
}
return 0;
}
sum=1+1/2+1/3+......+1/n求和
#include <stdio.h>
int main()
{
int n;
int i;
double sum = 0.0;
scanf("%d",&n);
for ( i = 1; i<=n; i++){
sum += 1.0/i;
}
printf("f(%d)=%f\n",n,sum);
return 0;
}
+-+-+-+-
#include <stdio.h>
int main()
{
int n;
int i;
double sum = 0.0;
int sign = 1;
scanf("%d",&n);
for ( i = 1; i<=n; i++){
sum += sign*1.0/i;
sign = -sign;
}
printf("f(%d)=%f\n",n,sum);
return 0;
}
求最大公约数
- 枚举法
- 辗转相除法:
正序分解整数