2. π 萊布尼茨級數逼近
double pi = 0, term = 1, denom = 1;
while (fabs(term) > 1e-6) {
pi += term;
denom += 2;
term = (term > 0) ? -1.0/denom : 1.0/denom;
}
printf("%.6f\n", 4*pi);
3. 實數整數部分位數
double x; scanf("%lf", &x);
int n = (int)fabs(x), cnt = 0;
do { cnt++; n/=10; } while (n);
printf("%d\n", cnt);
4. 二分法求根
double f(double x){ return 2*x*x*x - 4*x*x + 3*x - 6; }
double a, b; scanf("%lf%lf", &a, &b);
if (f(a)*f(b) > 0) return 0;
while (fabs(f((a+b)/2)) > 1e-6) {
double m = (a+b)/2;
if (f(a)*f(m) < 0) b = m; else a = m;
}
printf("%.2f\n", (a+b)/2);
5. 牛頓迭代法開平方
double x, x0=1, x1; scanf("%lf", &x);
do { x0 = x1; x1 = 0.5*(x0 + x/x0); } while (fabs(x1-x0) > 1e-5);
printf("%lf\n", x1);
6. 完數(因子和等於自身)
for (int i=2; i<=1000; i++) {
int sum = 1;
for (int j=2; j*j<=i; j++)
if (i%j==0) sum += j + (j*j==i ? 0 : i/j);
if (sum == i) print_factors(i);
}
7. 日期轉年度天數
int days[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int y,m,d; scanf("%d-%d-%d", &y,&m,&d);
int total = d;
for (int i=0; i2 && (y%400==0 || (y%4==0 && y%100!=0))) total++;
printf("%d\n", total);
8. 百分制轉等級
int g; scanf("%d", &g);
char c = "EEEEEEEDCBAA"[g/10]; // 查表法最簡潔
printf("%c\n", c);