- 1、实现一个函数,判断是否是素数,调用它显示100~1000以内所有的素数
- 2、输入两个日期(yyyy-mm-dd),计算两个日期间隔多少天
- 3、实现一个函数,判断一个整数是否是回文数,调用它显示1亿-10亿的所有回文数
- 4、输入一个整数,显示它的补码
- 5、计算出100的阶乘
提示:练习4:计算机中数据以补码的方式储存,所以直接用位操作符取出即可
练习5:100!会很大,因此不能使用int 等数据类型储存,即使是long long int 也不够,因此需要用到数组,建议char类型数组
个人代码如下:
#include#include #include //判断是否为素数 int is_prime(int num) { int flag=1; for(int i=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 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 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 a[i]=0; } a[0]=1; for(int i=1;i<=n;i++) { add=0; for(int j=0;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); } } 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; }
最后的阶乘计算有瑕疵,还可以在此基础上继续优化



