前言:刚刚学习过循环语句后,需要练习来巩固下刚刚获得的知识点。下有四道经典的练习,望能更好的认识到循环等知识点。
1、计算所有的三位水仙花数
水仙花数是指一个n位数,每一位数字的n次幂的和正好等于这个数本身。比如:153 = 1^3 + 5^3 + 3^3
#include <stdio.h>
int main(int argc,const char* argv[])
{
int i =100,g = 0,s = 0,b = 0;
for(int i=100; i<1000; i++)
{
g = i%10;
s = i/10%10;
b = i/100;
if(i == g*g*g + s*s*s + b*b*b)
{
printf("%d ",i);
}
}
printf("\n i=%d g=%d\n",i,g);
}
2、输入一个正整数,判断是否是素数
#include <stdio.h>
int main(int argc,const char* argv[])
{
int num = 0;
printf("请输入一个整数:");
scanf("%d",&num);
if(2 > num)
{
printf("输入数据有误\n");
return 0;
}
int cnt = 0;
for(int i=2; i<num; i++)
{
if(!(num%i))
{
cnt++;
}
}
if(!cnt)
{
printf("yes\n");
}
else
{
printf("no\n");
}
}
3、输入一个正整数,判断是否是回文数 12321 123321
#include <stdio.h>
int main(int argc,const char* argv[])
{
int num = 0,new = 0;
printf("请输入一个正整数:");
scanf("%d",&num);
if(0 > num)
{
printf("输入数据有误\n");
return 0;
}
int copy = num;
while(copy)
{
new = new*10 + copy%10;
copy /= 10;
}
printf("%d %d\n",num,new);
if(new == num)
{
printf("yes\n");
}
else
{
printf("no\n");
}
}
4、不使用循环计算N的阶乘 5! 12345=120
int main(int argc,const char* argv[])
{
int n = 0, ret = 1;
printf("请输入n的值\n");
scanf("%d",&n);
/*
printf("1");
for(int i=2; i<=n; i++)
{
printf("*%d",i);
ret *= i;
}
printf("=%d\n",ret);
*/
loop:
ret *= n;
if(--n > 1) goto loop;
printf("%d\n",ret);
}
5、输入一个日期(yyyy-mm-dd) 计算出该日期距离1年1月1日过了多少天
#include <stdio.h>
#include <stdint.h>
int main(int argc,const char* argv[])
{
uint16_t year = 0,month = 0,day = 0;
printf("请输入一个日期:");
scanf("%hu%hu%hu",&year,&month,&day);
uint16_t months[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
months[1] = 28+(0==year%4 && 0!=year%100 || 0==year%400);
uint32_t sum = 0;
if(month > 12 || day > months[month-1])
{
printf("输入日期有误\n");
return 0;
}
for(uint16_t y=1; y<year; y++)
{
sum += 365+(0==y%4 && 0!=y%100 || 0==y%400);
}
for(int m=0; m<month-1; m++)
{
sum += months[m];
}
printf("%u\n",sum+day-1);
}