1、实现一个函数,判断整数是否为素数,调用函数显示出100-10000的素数
#include <stdio.h>
#include <stdbool.h>
bool is_prime(int num)
{
for(int i=3; i<=num/2; i++)
{
if(0 == num%i)
{
return false;
}
}
return true;
}
int main(int argc ,const char* argv[])
{
for(int i=100; i<10000; i++)
{
is_prime(i) && printf("%d ",i);
}
}
2、 输入两个日期,计算两个日期之间隔了多少天
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include <stdlib.h>
bool is_leap(uint16_t y);
uint8_t get_days(uint16_t y,uint8_t m);
uint32_t date_to_days(uint16_t y,uint8_t m,uint8_t d);
bool is_date(uint16_t y,uint8_t m,uint8_t d);
int main(int argc ,const char* argv[])
{
uint16_t y = 0;
uint8_t m = 0,d = 0;
printf("请输入第一个日期:");
scanf("%hu-%hhu-%hhu",&y,&m,&d);
if(!is_date(y,m,d))
{
printf("输入日期有误\n");
return 0;
}
uint32_t days1 = date_to_days(y,m,d);
printf("请输入第二个日期:");
scanf("%hu-%hhu-%hhu",&y,&m,&d);
if(!is_date(y,m,d))
{
printf("输入日期有误\n");
return 0;
}
uint32_t days2 = date_to_days(y,m,d);
printf("两个日期相隔了%u天\n",abs(days1-days2));
}
bool is_leap(uint16_t y)
{
return 0 ==y%4 && 0!=y%100 || 0==y%400;
}
uint8_t get_days(uint16_t y,uint8_t m)
{
switch(m)
{
case 2:
return 28+is_leap(y);
case 4: case 6: case 9: case 11:
return 30;
default:
return 31;
}
}
uint32_t date_to_days(uint16_t y,uint8_t m,uint8_t d)
{
uint32_t sum = d;
for(int i=1; i<y; i++)
{
sum += 365 + is_leap(i);
}
for(int i=1; i<m; i++)
{
sum += get_days(y,i);
}
return sum;
}
bool is_date(uint16_t y,uint8_t m,uint8_t d)
{
return y>0 && m>0 && m<13 && d>0 && d<=get_days(y,m);
}
作业3、实现一个函数,判断整数是否为回文数, 调用该函数计算出1亿到10亿之间所有的回文数
#include <stdio.h>
#include <stdbool.h>
bool is_backchar(int num);
int main(int argc ,const char* argv[])
{
for(int i=100000000; i<1000000000;i++)
{
is_backchar(i) && printf("%d",i);
}
}
bool is_backchar(int num)
{
int temp = num, new = 0;
while(temp)
{
new = new*10 + temp%10;
temp /=10;
}
return new == num;
}
作业4、计算出100的阶乘
#include <stdio.h>
int main(int argc ,const char* argv[])
{
char rets[256] = {1};
int cnt = 1; // 指向结果接下去要进位的下标
for(int i=2; i<=100; i++)
{
char carry = 0; // 进位
for(int j=0; j<cnt; j++)
{
short num = rets[j] * i + carry;
rets[j] = num % 10;
carry = num / 10;
}
while(carry)
{
rets[cnt++] = carry%10;
carry /= 10;
}
}
while(cnt--)
{
printf("%d",rets[cnt]);
}
}
作业5、输入一个整数,显示该整数的补码
#include <stdio.h>
int main(int argc ,const char* argv[])
{
int num = 0;
scanf("%d",&num);
char bits[32] = {};
for(int i=0; i<32; i++)
{
bits[i] = num >> i & 1;
}
for(int i=31; i>=0; i--)
{
printf("%hhd",bits[i]);
}
}