作业1:实现一个函数,判断一个整数是否是素数,调用该函数来显示出100~10000之间的所有素数
#include<stdio.h>
#include<stdbool.h>
#include<math.h>
bool is_sushu(int num)
{for(int i=2;i<=sqrt(num);i++){if(num%i==0)return false;}return true;
}int main(int argc,const char* argv[])
{for(int i=100;i<10000;i++){if(is_sushu(i))printf("%d ",i); }
}
作业2:输入两个日期,计算出两个日期之间相隔多少天
#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>bool is_runnian(int year)
{return 0==year%4 && 0!=year%100 || 0==year%400;}int day(int year,int mon,int day0)
{int sum=0;for(int i=1;i<year;i++){sum+=365+is_runnian(i); }for(int i=1;i<mon;i++){switch(i){case 2:sum+=28+is_runnian(year);break;case 4:case 6:case 9:case 11:sum+=30;break;default:sum+=31;break;}}sum+=day0;return sum;
}int main(int argc,const char* argv[])
{int day1,day2,year1,year2,mon1,mon2;printf("输入第一个日期");scanf("%d%d%d",&year1,&mon1,&day1);printf("输入第二个日期");scanf("%d%d%d",&year2,&mon2,&day2);int xgts=day(year1,mon1,day1)-day(year2,mon2,day2);printf("%d",abs(xgts));
}
作业3:实现一个函数,判断一个整数是否是回文数,调用它来显示1亿~10亿之间所有回文数
#include<stdio.h>
#include<stdbool.h>bool is_huiwen(int num)
{int copy=num,num1=0;while(copy>0){num1=num1*10+copy%10;copy=copy/10;}return num==num1;
}int main(int argc,const char* argv[])
{for(int i=100000000;i<1000000000;i++){if(is_huiwen(i)) printf("%d ",i); }
}
作业4:计算出100的阶乘
#include<stdio.h>int main(int argc,const char* argv[])
{int num[50]={};int cnt=0;num[0]=1;for(int i=1;i<101;i++) //累乘{for(int j=cnt;j>=0;j--) //将一个数字每4个一组拆分{num[j] *= i; //num中每个数值*i if(num[cnt]>=10000)cnt++; //最高位大于10000,多用一个数组值if(num[j]>=10000){num[j+1] += num[j]/10000;num[j] = num[j]%10000;}}}for(int i=cnt;i>=0;i--){if(num[i]){printf("%d",num[i]);}else{printf("0000");}}
}
改良版
#include <stdio.h>int main(int argc,const char* argv[])
{// 运算结果按位存到数组中 123 *9char 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){// 如果最高位有进位,则赋值给进位,并cnt++rets[cnt++] = carry % 10;carry /= 10;}}printf("%d\n",cnt);while(cnt--){printf("%hhd",rets[cnt]); }}
作业5:输入一个整数,显示它的补码
#include<stdio.h>
#include<stdint.h>
int main(int argc,const char* argv[])
{int num;printf("输入n ");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]); }}