同码小数和

    设和式s(d,n)=0.d+0.dd+0.ddd+...+0.dd...d为n项同码d小数之和,其中第k项小数点后有连续k个数字d(d=1,2,...,9)。

例如:s(7,4)=0.7+0.77+0.777+0.7777


1.说明:

输入整数d,n(1<=d<=9,1<n<3000),计算并输出同码小数和s(d,n)(四舍五入精确到小数点后八位);

设置双精度实变量s实施累加求和;

设置i(1~n)循环枚举和式的每一项,设前项小数为t,则当前项显然应为:t=t/10+(double)d/10


2.程序设计:

(1).循环设计求解;

#include<stdio.h>
void main()
{
   int i,d,n;
   double s,t;
   printf("请输入两个整数d,n:");
      scanf("%d,%d",&d,&n);
   s=t=0;    /*t,s清零*/
   for(i=1;i<=n;i++)
   {
      t=t/10+(double)d/10;    /*t为第i项小数*/
      s+=t;    /*求和s*/
   }
   printf("s(%d,%d)=%.8f\n",d,n,s);    /*按公式输出和s*/
   getch();
}

(2).省略循环设计求解;

#include<stdio.h>
void main()
{
   int d,n;
   double s;
   printf("请输入两个整数d,n:");
      scanf("%d,%d",&d,&n);
   s=(n-0.111111111)*d/9;    /*因输出精确到小数点后八位,可取至小数点后九位*/
   printf("s(%d,%d)=%.8f\n",d,n,s);
   getch();
}

(3).拓广到任意指定同码;
例如:s(2016,3)=0.2016+0.20162016+0.201620162016
输入整数d,n(1<=d,n<3000),计算并输出和s(d,n)(四舍五入精确到小数点后八位)。


#include<stdio.h>
void main()
{
   int a,b,d,i,n;
   double t,s;
   printf("请输入两个整数d,n:");
   scanf("%d,%d",&d,&n);
   a=d;
   b=1;
   while(a>0)
      {b*=10;a/=10;}    /*根据d计算b*/
   t=s=0;
   for(i=1;i<=n;i++)
   {
      t=t/b+(double)d/b;    /*强制类型转换*/
      s+=t;
   }
   printf("s(%d,%d)=%.8f\n",d,n,s);
   getch();
}


3.程序运行示例及注意事项;

(1),(2)程序:请输入两个整数d,n:7,2017

                                 s(7,2017)=1568.69135802

(3)程序:请输入两个整数d,n:2017,1000

                    s(2017,1000)=201.72015184 


注意:事实上,一个简单的案例都可以拓广或引申到较为复杂的案例,而任何复杂的案例都可以追溯到一个简单的案例。



  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值