递归做
#include<stdio.h> double number(int n) { int i; double num1=0; for(i=n;i>1;i--) { num1+=(double)1/i+(double)1/(i-1); } num1+=(double)1/n; if(n==1) return 1; else if(n==0) return 0; else return num1+number(n-1); } int main() { double number(int n); int n; double num=0; while(~scanf("%d",&n)) { if(n==0) return 0; else{ num=number(n); printf("%.2lf\n",num);} } } 以对角线分开,两边对称着做(作为新人我不知道这种算法叫啥。。。。)
#include<stdio.h> int main ( ) { int n,i; double num1=0,num2=0; while(~scanf("%d",&n)) { sum2=0; double k=1; if(n==0) return 0; for(i=n;i>1;i--) { (double)num1=(1/i)*k; (double)num2=num1+num2; k++; } printf("%.2lf\n",n+2*sum2); } return 0; }