将一个数所有数取出来
原理:
1.判断几位数 l
2.定义一个长度为l的一维数组
3.利用for循环将其储存在数组中
4.然后调用函数
例题
…
(一) :给出一个不多于5位的整数,要求
1、求出它是几位数
2、分别输出每一位数字
3、按逆序输出各位数字,例如原数为321,应输出123
…
#include<stdio.h>
int main()
{
int num,temp,item=10000,size,a[5],i,j,N;
scanf("%d",&num);
//判断几位数
//原理就是从最大数除
for(i=5;i>0;i--,item/=10)
{
if((num/item)!=0)
{
size=i;
break;
}
}
//取数
for(i=0;i<size;i++)
{
a[i]=num%10;
num/=10;
}
printf("%d\n",size);
for(i=size-1;i>0;i--)
printf("%d ",a[i]);
printf("%d\n",a[0]);
for(i=0;i<size-1;i++)
printf("%d",a[i]);
printf("%d\n",a[size-1]);
return 0;
}
(二)输入两个正整数m和n,求其最大公约数和最小公倍数。
原理
1.先判断两个数的大小 将a置为最小数
2.for从大到小循环
3判断两数对他取余为0结束
4.最小公倍数两数相乘除以最大公约数
#include<stdio.h>
int gcd(int m,int n)
{
int i;
if(m>n)
m=n;
for(i=n;i>0;i--)
{
if((m%i==0)&&(n%i==0))
break;
}
return i;
}
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d %d",gcd(a,b),a*b/gcd(a,b));
return 0;
}
(三)【阶乘求和】求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字(n不超过20)。
原理:
1.定义一个函数求每一个数的阶乘
2.在主函数中通过循环调用该函数
3.将sum初始值置为0
4.循环加
#include<stdio.h>
unsigned long long fun(int n)
{
return n<=1? 1 : n*fun(n-1);
}
main()
{
int n,i=1;
long long sigma=0;
scanf("%d",&n);
while(i<=n)
{
sigma+=fun(i);
i++;
}
printf("%.0lld\n",sigma);
}
完数的判断
一个数如果恰好等于不包含它本身所有因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数。
原理:
1.议一个注意点他是所有因子相加
2.个位数的规律
3.一半
#include<stdio.h>
int main()
{
double N,sum=0;
int factor[100],x=0;
scanf("%lf",&N);
for(int i=6;i<=N;i++)
{
if(i%10==6||i%10==8)//所有完数个位数都是6或8
{
for(int j=1;j<=i/2;j++)
{
if(i%j==0)
{
factor[x]=j;
x++;
sum=sum+j;
}
if(sum==i)
{
printf("%d its factors are ",i);
for(int k=0;k<x;k++)
{
printf("%d ",factor[k]);
}
printf("\n");
}
}
sum=0;
x=0;
}
}
return 0;
}
迭代法求平方根
原理:
用迭代法求 平方根
1.式为: X[n+1]=(X[n]+a/X[n])/2
2.首先把函数化解成线性代数方程√x=a等价于y=x²-a。此时函数的零点(根)就是方程的解了。
3.图中x的值就是函数的解。Xn是任意一个取值。那条红色的线就是函数的切线。你可以看出X<Xn+1<Xn将Xn+1赋值给Xn,for循环。你可以看出Xn不断接近解。
Xn+1的函数方程为,对他求导。可以看出当f(x)Xf’’(x)>0时,Xn+1的导数小于零。而g(x)=0这个x是零点,由不动点原理知Xn+1不断趋近于x。
#include<stdio.h>
#include<math.h>
int main() {
double x1,x2,a;
int i;
scanf("%lf",&a);
x2=1.0;
while(1) {
x1=x2;
x2=(x1+a/x1)/2.0;
if(fabs(x1-x2)<0.00001) {
printf("%.3f",x2);
break;
}
}
return 0;
}