您好,欢迎访问三七文档
当前位置:首页 > 高等教育 > 理学 > C++简单数学实现基础
C++简单数学实现基础1、判断某个数是否是素数、奇数、偶数、某个整数的算术平方根、水仙花数、回文数。#includeiostream#includecmath#includestring#includealgorithmusingnamespacestd;boolisPrime(intn){if(n2)returnfalse;for(inti=2;i=n/2;i++)if(n%i==0)returnfalse;returntrue;}boolisOdd(intn){if(n%2)//orif(n&1)returntrue;returnfalse;}boolisEven(intn){if(!(n%2))//orif(!(n&1))returntrue;returnfalse;}boolisSqrt(floatn){doubletemp=sqrt(n);if(fabs(pow(temp,2)-n)1e-12)returntrue;returnfalse;}boolisNarcissistic(intn){inta,b,c,result;a=n/100;if(!a||a=10)returnfalse;b=(n-a*100)/10;c=n%10;result=pow(a,3)+pow(b,3)+pow(c,3);if(result==n)returntrue;returnfalse;}boolisPalindrome_forInt(longn){longm=0;for(inti=n;i;i/=10){m*=10;m+=i%10;}if(m==n)returntrue;returnfalse;}boolisPalindrome_forString(string&s){stringtemp(s);reverse(s.begin(),s.end());if(temp==s)returntrue;returnfalse;}intmain(){intn;longl;floatf;strings;coutIneedaninteger:;cinn;coutisPrime:isPrime(n)'\n'isOdd:isOdd(n)'\n'isEven:isEven(n)'\n'isNarcissistic:isNarcissistic(n)endl;coutendl;coutIneedalonginteger:;cinl;coutisPalindrome_forInt:isPalindrome_forInt(l)endl;coutendl;coutIneedastring:;cins;coutisPalindrome_forString:isPalindrome_forString(s)endl;coutendl;coutIneedafloat-typedecimal:;cinf;coutisSqrt:isSqrt(f)endl;return0;}2、求两个数的最大公因数和最小公倍数。#includeiostreamusingnamespacestd;intgcd(intx,inty){if(y==0)returnx;elseif(xy)returngcd(y,x);returngcd(y,x%y);}intmain(){inta,b;cinab;coutgcd(a,b)endl;return0;}//下面这种方法用奇偶优化,尝试理解这种方法:intgcd_optimized(intx,inty){if(xy)returngcd(y,x);if(y==0)returnx;else{if(x%2==0){if(y%2==0)return2*gcd(x1,y1);elsereturngcd(x1,y);}else{if(y%2==0)returngcd(x,y1);elsereturngcd(y,x-y);}}}3、生成十个随机数。#includeiostream#includectime#includecstdlibusingnamespacestd;intmain(){srand((unsigned)time(NULL));intrand_start,rand_end;cinrand_startrand_end;for(inti=0;i10;++i)coutrand()%(rand_end-rand_start+1)+rand_startendl;return0;}4、按递增和递减排序一组数据。#includeiostream#includealgorithmusingnamespacestd;boolmyCompare(intx,inty){return(xy);}intmain(){intarr[10]={15,24,33,9,76,25,14,46,5,17};sort(arr,arr+10);//ascendingorderfor(inti=0;i10;i++)coutarr[i]endl;sort(arr,arr+10,myCompare);//descendingordercoutendl;for(inti=0;i10;i++)coutarr[i]endl;return0;}//如下方法亦可:#includeiostream#includealgorithm#includefunctionalusingnamespacestd;intmain()最大公因数(gcd,greatestcommondivisor)可用欧几里德(Euclid)提出的一种算法求解:若求gcd(x,y),假设xy,如果有x=qy+r,那么gcd(x,y)=gcd(y,r)。这就是gcd递归定理,即gcd(a,b)=gcd(b,amodb)。ACM中常用写法:return(a==0)?b:gcd(b%a,a);最小公倍数(lcm,least/lowestcommonmultiple)的算法是两数相乘并除以它们的最大公因数。{intarr[10]={15,24,33,9,76,25,14,46,5,17};sort(arr,arr+10,lessint());//ascendingorderfor(inti=0;i10;i++)coutarr[i]endl;sort(arr,arr+10,greaterint());//descendingordercoutendl;for(inti=0;i10;i++)coutarr[i]endl;return0;}//用容器和迭代器也能完成排序#includeiostream#includevector#includealgorithmusingnamespacestd;intmain(){vectorintNums{15,24,33,9,76,25,14,46,5,17};sort(Nums.begin(),Nums.end());//ascendingorderfor(autosep:Nums)coutsependl;coutendl;sort(Nums.rbegin(),Nums.rend());//descendingorderfor(autosep:Nums)coutsependl;return0;}5、求一组数最大值和最小值。#includeiostreamusingnamespacestd;intmain(){intarr[10]={15,24,33,9,76,25,14,46,5,17};intMax=arr[0],Min=arr[0];for(inti=1;i10;++i){if(Maxarr[i])Max=arr[i];if(Minarr[i])Min=arr[i];}coutMax:Max,Min:Minendl;return0;}//也可使用algorithm内置函数:#includeiostream#includealgorithmusingnamespacestd;intmain(){intarr[10]={15,24,33,9,76,25,14,46,5,17};coutMin:*min_element(arr,arr+10)endl;coutMax:*max_element(arr,arr+10)endl;return0;}6、求斐波那契数列第n项的值。#includeiostreamusingnamespacestd;longFibonacci(intn){longresult=0;longa[2]{0,1};if(n==0||n==1)returnn;else{for(inti=1;in;i++){result=a[0]+a[1];a[0]=a[1];a[1]=result;}}returnresult;}intmain(){inti;cini;coutFibonacci(i)endl;return0;}//下面是逐位输出的方法,适用于较大数据输出,逻辑极强#includeiostream#includecstringusingnamespacestd;constintLEN=150;voidfi(inta[],intb[],intc[]){for(inti=LEN-1;i=1;i--){c[i-1]=(a[i]+b[i]+c[i])/10;c[i]=(a[i]+b[i]+c[i])%10;}}intmain(){inti;cini;intf[200][LEN];memset(f,0,sizeof(f));f[1][LEN-1]=f[2][LEN-1]=1;for(inti=3;i=150;i++)fi(f[i-2],f[i-1],f[i]);for(intj=0;jLEN;j++)if(f[i][j]!=0)coutf[i][j];coutendl;return0;}//验证:第100项的值是354224848179261915757、判断一个正整数是2的n次方。#includeiostream#includecmathusingnamespacestd;intmain(){inti;cini;if((i0)&&(i&(i-1))==0)coutYes.n=log2(i)endl;elsecoutNo.endl;return0;}8、判断一个数是几位数。#includeiostream#includestringusingnamespacestd;intmain(){intstr_int;stringstr;cinstr_int;str=to_string(str_int);coutstr.size();return0;}//这个方法十分新颖,用函数自身性质解决#includeiostream#includecstdiousingnamespacestd;intmain(){inti;charbuff[128];cini;intlen=sprintf(buff,%d,i);coutlenendl;return0;}//这个方法需要数学思维:基本的对数运算#includeiostream#includecmathusingnamespacestd;intmain(){intnum,len;cinnum;if(num)len=1+(int)log10(abs(num));elseif(num==0)len=1;coutlenendl;return0;}9、
本文标题:C++简单数学实现基础
链接地址:https://www.777doc.com/doc-2107288 .html