C语言学习笔记第六天练习作业
- 1、实现一个函数,判断是否是素数,调用它显示100~1000以内所有的素数
- 2、输入两个日期(yyyy-mm-dd),计算两个日期间隔多少天
- 3、实现一个函数,判断一个整数是否是回文数,调用它显示1亿-10亿的所有回文数
- 4、输入一个整数,显示它的补码
- 5、计算出100的阶乘
提示:练习4:计算机中数据以补码的方式储存,所以直接用位操作符取出即可
练习5:100!会很大,因此不能使用int 等数据类型储存,即使是long long int 也不够,因此需要用到数组,建议char类型数组
个人代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//判断是否为素数
int is_prime(int num)
{
int flag=1;
for(int i=2;i<num/2;i++)
{
if(num%i==0)
{
flag=0;
break;
}
}
return flag;
}
//返回1-1-1到year-month-day的时间间隔
long int day_pass(int year,int month,int day)
{
long int count=0;
if(year>1)
{
count+=(year-1)*365;
}
for(int i=1;i<year;i++)
{
if(i%400==0 || i%4==0 && i%100!=0)
{
count++;
}
}
switch(month-1)
{
case 11:count+=30;
case 10:count+=31;
case 9:count+=30;
case 8:count+=31;
case 7:count+=31;
case 6:count+=30;
case 5:count+=31;
case 4:count+=30;
case 3:count+=31;
case 2:count+=28;
case 1:count+=31;
default:break;
}
for(int i=1;i<year;i++)
{
count++;
}
count+=day-1;
return count;
}
//判断是否为回文数
int is_palindrome(long int num)
{
long int num_1=num,temp=0;
while(num)
{
temp=temp*10+num%10;
num/=10;
}
if(temp==num_1)
{
return 1;
}else
{
return 0;
}
}
//显示一个数的补码
void show_complement(int data)
{
for(int i=0;i<32;i++)
{
if(data&(1<<(31-i)))
{
printf("1");
}else
{
printf("0");
}
}
printf("\n");
}
//求n的阶乘
void factorial(char a[],int n)
{
int cnt=1;
int add=0;
for(int i=0;i<n;i++)
{
a[i]=0;
}
a[0]=1;
for(int i=1;i<=n;i++)
{
add=0;
for(int j=0;j<cnt;j++)
{
a[j]=i*a[j]+add;
add=a[j]/10;
a[j]=a[j]%10;
}
cnt++;
}
}
int main(int argc,const char* argv[])
{
printf("=========test01========\n");
for(int i=100;i<1000;i++)
{
if(is_prime(i))
{
printf("%d ",i);
}
}
printf("\n");
printf("=========test02========\n");
printf("请输入xxxx-xx-xx:");
int y1,m1,d1;
scanf("%d%d%d",&y1,&m1,&d1);
printf("请输入xxxx-xx-xx:");
int y2,m2,d2;
scanf("%d%d%d",&y2,&m2,&d2);
printf("相差%ld天\n",abs(day_pass(y2,m2,d2)-day_pass(y1,m1,d1)));
printf("=========test03========\n");
int cnt=0;
for(long int i=100000000;i<1000000000;i++)
{
if(is_palindrome(i))
{
printf("%ld ",i);
/*
if(cnt++>5)
{
break;
}
*/
}
}
printf("=========test04========\n");
int x;
printf("请输入x的值用来显示补码:");
scanf("%d",&x);
show_complement(x);
printf("=========test05========\n");
int n;
printf("输入阶乘的阶数:");
scanf("%d",&n);
char b[n];
factorial(b,n);
int i=n-1;
for(;i>=0;i--)
{
if(b[i]>0)
{
break;
}
}
for(;i>=0;i--)
{
printf("%d",b[i]);
}
return 0;
}
最后的阶乘计算有瑕疵,还可以在此基础上继续优化