数字问题

来源:互联网 发布:python svd分解 编辑:程序博客网 时间:2024/06/11 17:52


1.判断一个数是否为素数

素数就是仅能被1和它自身整除的整数。

判断一个整数n是否为素数就是要判断整数n能否被除1和自身之外的任意整数整除,若都不能整除,则n为素数。

源码:

#include<iostream.h>#include<math.h>void main(){int m,i;double k;cout<<"please input the number:"<<endl;cin>>m;k=sqrt(m);bool bflag = true;for(i=2;i<=k;i++)  {if(m%i==0){bflag = false;break;}}if(bflag) cout<<m<<" is a prime number!"<<endl;else cout<<m<<" is not a prime number!"<<endl;  }
效果:


2.有限5位数

个位数为6且能被3整除的五位数共有多少?

源码:

#include<iostream.h>void main(){long int i=0;int count=0;for(i=1000;i<9999;i++){if((i*10+6)%3==0){cout<<i<<" ";count++;}}cout<<endl;cout<<count<<endl;}

效果:



3.8除不尽的自然数

一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商为a。

又知这个自然数被17除余4,所得的商被17除余15,最后得到一个商是a的2倍。

求这个自然数。

分析:

设最后的商为i(i从0开始取值),用逆推法可以列出关系式:

( ( (i*8+7) * 8 ) + 1 ) * 8 + 1 = ( (2*i*17) + 15 ) * 17 + 4

再用试探法求出商i的值。

源码:

#include<iostream.h>void main(){int i;for(i=0; ;i++){if( ((i*8+7)*8+1)*8+1 == (2*i*17+15)*17+4 ){cout<<"the left number is : "<<i<<endl;break;}}cout<<"the required number is : "<<((i*8+7)*8+1)*8+1<<endl;}
效果:



4.一个奇异的三位数

一个自然数的七进制表达式是一个三位数,而这个自然数的九进制表示也是一个三位数,且这两个三位数的数码顺序正好相反,求这个三位数。

分析:

根据题意可知,七进制和九进制表示的这个自然数的每一位一定小于7,可设其七进制数形式为kji,然后设其九进制表示形式为ijk(i、j、k的取值分别为1~6)。

源码:

#include<iostream.h>void main(){int i,j,k;for(i=1;i<7;i++){for(j=0;j<7;j++){for(k=1;k<7;k++){if((i*9*9+j*9+k) == (i+j*7+k*7*7)){cout<<"七进制数为"<<k<<j<<i<<endl;cout<<"九进制数为"<<i<<j<<k<<endl;cout<<"the special number is "<<i*9*9+j*9+k<<endl;}}}}}
效果:



5.4位反序数

设N是一个四位数,它的9倍恰好是其反序数,求N。

反序数就是将整数的数字倒过来形成的整数。

分析:

可设整数N的千、百、十、个位为i、j、k、l,其取值均为0~9,则满足关系式:

( i*10^3 + j*10^2 + 10*k + l) * 9 = (l*10^3 + k*10^2 + 10*j + i)

源码1:

#include<iostream.h>void main(){int i=1,j,k,l;for(i=1;i<=9;i++){for(j=0;j<=9;j++){for(k=0;k<=9;k++){for(l=1;l<=9;l++){if((i*1000+j*100+k*10+l)*9 == l*1000+k*100+j*10+i){cout<<i<<j<<k<<l<<endl;break;}}}}}}
效果1:



源码2:

void main(){int n;for(n=1002;n<1111;n++){if(n%10*1000+n/10%10*100+n/100%10*10+n/1000==9*n){cout<<"the number is "<<n<<endl;}}}
效果2:



6.求车速

一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数,为95859。两小时候里程表上出现了一个新的对称数。

问该车的速度是多少?新的对称数是多少?

分析:

设所求对称数为i,其初值为95859,对其依次递增取值,将i值的每一位分解后与其对称位置上的数进行比较,若每个对称位置上的数皆相等,则可判定i即为所求的对称数。

源码:

#include<iostream.h>void main(){int t,a[5];long int i,k;for(i=95860; ;i++){for(t=0,k=100000;k>=10;t++){a[t]=(i%k)/(k/10);k/=10;}if( (a[0]==a[4])&&(a[1]==a[3]) ){cout<<"the number is "<<a[0]<<a[1]<<a[2]<<a[3]<<a[4]<<endl;cout<<"the velocity is "<<(i-95859)/2<<endl;break;}}}

效果:



0 0
原创粉丝点击