求n个数的最大公因数
#include <stdio.h>
long long fun(long a,long b)
{
long long r;
do {
r = a%b;
a = b;
b = r;
}while (b!=0);
return a;
}
int main()
{
int n;
scanf("%d",&n);
long long a[n];
for (int i=0 ; i<n ; i++) {
scanf("%lld",&a[i]);
}
if (n==1) {
printf("%lld",a[0]);
//特判只有一个数的时候!!!!!
}else {
long long ret=fun(a[0],a[1]);
for (int i=2 ; i<n ; i++) {
ret = fun(ret,a[i]);
}
printf("%lld",ret);
}
return 0;
}
求解二维线性方程
牛顿迭代法(牛顿-拉夫森算法)
列方程f(x)=0,c为方程的解,
x(n+1)=xn-[f(xn)/f’(xn)]
#include <stdio.h>
#include <math.h>
int main()
{
double c;
scanf("%lf",&c);
double a=c/2;
while (fabs(a*a*a-c)>1e-6) {
a = a - (a*a*a-c)/(3*a*a);
}
printf("%.10f",a);
return 0;
}
abs()是求整数的绝对值
fabs()是求浮点数的绝对值
#include <stdlib.h>
#include <stdio.h>
int main()
{
int T,n;
scanf("%d",&T);
int a[101];
double r,X,Y,Z,x;
long long huge=1e9;
for (int i=0;i<T;i++) {
scanf("%d\n",&n);
for (int j=1;j<=n+1;j++) {
scanf("%d",&a[j]);
}
double MIN=-1.0,MAX=1.0;
while ((MAX-MIN)*huge>1.0) {
r = (MIN+MAX)/2;
X = a[1]*-1;
x = 1 + MIN;
for (int k=2;k<=n+1;k++) {
X *= x;
X += a[k];
}
Y= a[1]*-1;
x = 1 + MAX;
for (int k=2;k<=n+1;k++) {
Y *= x;
Y += a[k];
}
Z= a[1]*-1;
x = 1 + r;
for (int k=2;k<=n+1;k++) {
Z *= x;
Z += a[k];
}
if (X*Z>0) {
MIN = r;
}else {
MAX = r;
}
}
r = (MIN+MAX)/2;
printf("case #%d:\n",i);
if ((r-0)*huge<1.0 && (r-0)*huge>-1.0) {
printf("0.0000%%\n");
}else {
printf("%.4f%%\n",r*100);
}
}
return 0;
}