求和s=1+1/22+1/333+.....+1/nn...nn+.....
时间: 2023-10-05 14:14:23 浏览: 78
这个题目可以使用数学归纳法来证明。
首先,我们可以用小数来表示每一项:
s = 1 + 0.0454545 + 0.003003003 + ...
可以发现,每一项的小数部分都是循环的,而循环节的长度等于该项对应的 n 的位数。因此,我们可以将每一项写成分数形式,然后通分相加,得到:
s = (10^0)/(10^0-1) + (10^2)/(10^2-1) + (10^3)/(10^3-1) + ...
接下来,我们对该式进行变形:
s = [(10^0)/(10^0-1)] + [(10^2-10^0)/(10^2-1)] + [(10^3-10^2)/(10^3-1)] + ...
s = 1 + [(10^2-1)/(10^2*(10^0-1))] + [(10^3-10^2)/(10^3*(10^0-1))] + ...
s = 1 + [(10^2-1)/(10^2*9)] + [(10^3-10^2)/(10^3*9)] + ...
s = 1 + (1/9)*[(1/1) + (1/99) + (1/999) + ...]
可以看出,最后一个式子就是一个等比数列求和,通项公式为:(1/10^n-1),因此,
s = 1 + (1/9)*[1/(1-1/10)] = 1 + 1 = 2
因此,原式的结果为 2。
相关问题
利用C语言求和s=1+1/22+1/333+...+1/nn...nn+.....
以下是利用C语言求和s=1+1/22+1/333+...+1/nn...nn+.....的代码:
```c
#include <stdio.h>
#include <math.h>
int main() {
int n;
printf("请输入n:");
scanf("%d", &n);
double s = 1.0; // 初始化s为1
for (int i = 2; i <= n; i++) {
int nn = i; // nn表示n...n,初始值为i
int count = 1; // 统计n的位数
while (nn >= 10) {
nn /= 10;
count++;
}
nn = i; // 重新赋值nn为i
double val = 0.0; // 计算1/nn...nn的值
for (int j = 1; j <= count; j++) {
val += nn / pow(10, (count-j+1));
}
s += 1.0 / val; // 累加到s中
}
printf("s = %lf\n", s);
return 0;
}
```
该程序首先读入一个正整数n,然后使用for循环遍历2到n的每个整数。对于每个整数i,我们需要计算1/nn...nn的值,其中nn表示n...n(共有i位)。为了计算nn,我们需要先统计n的位数,然后根据位数分解出每一位上的值。最后,利用pow函数计算1/nn...nn的值,并将其累加到s中。最终输出s的值即可。
函数fun()是根据正整数n,求下面数列的和 s=1+1/22+1/333+......+1/nn...nn 当输入n=5,s=1.04870057 ,注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的注释语句之间填入所编写的若干语句。
下面是函数fun的代码实现:
```c
#include<stdio.h>
#include<math.h>
float fun(int n)
{
float s=0,t;
int i,j,m,k;
for(i=1;i<=n;i++)
{
m=1;
for(j=1;j<=i;j++) m=m*10;
t=1.0/m;
for(k=2;k<=i;k++) t=t/10;
s=s+t;
}
return s;
}
int main()
{
int n=5;
printf("n=%d时,s=%10.8f\n",n,fun(n));
return 0;
}
```
在for循环中,i表示当前的位数,j用于计算10的i次方,m表示10的i次方,k用于计算10的k次方,t表示当前位的值,s表示最终求和的结果。
代码中需要填充的部分是:
```c
t=1.0/m;
for(k=2;k<=i;k++) t=t/10;
```
在这里,我们首先将t赋值为1/m,然后依次除以10的次方,直到除以i-1次方即可。