同码小数

整数部分为零,小数部分各位数字相同的小数称为同码小数,例如0.3,0.33,0.333,.......是同数码3的小数,记这些小数的前五项之和为s(3,5),记前五项的加权和为w(3,5),一般的记:

s(d,n) = 0.d+0.dd+0.ddd+0,dddd+.......+0.d......d

w(d,n) = 0.d+0.dd*2+0.ddd*3+........+n*0.d.......d

两和式为n项之和,其中第k项小数点后有k个数字d,加权和第k项的权系数为k。

枚举设计描述

//求s(d,n)与w(d,n),并比较和s与w共有多少个小数位对应数字相同
#include<stdio.h>
#include<math.h>
main(){
	int d,j,m,n;
	long t,s[10000],w[10000];
	printf("  请输入整数d,n:");
	scanf("%d,%d",&d,&n);
	for(j=0;j<=n;j++){
		s[j]=0;
		w[j]=0;      //s,w数组清零 
	}
	for(t=0,j=n;j>=1;j--)        
	{
		t=t+j;                 //t表示小数点后数的累加,且t只与w[j]有关,t会一直累加而不是运行一次就初始化 
		s[j]=(n+1-j)*d;        //s[j]表示和s小数点后第j位的共n+1-j个d的和;
		w[j]=t*d;              //加权和w小数点后第j位共t个d之和 
	}
	for(j=n;j>=1;j--)         //从后往前逐一进位
	{
		s[j-1]=s[j-1]+s[j]/10;
		s[j]=s[j]%10;
		w[j-1]=w[j-1]+w[j]/10;
		w[j] = w[j]%10;
	 } 
	 m = 0;
	 for(j=1;j<=n;j++)                  //比较相应小数位上s与w数字相同的位数
	 {
	 	if(s[j]==w[j])
	 	m++;
	  } 
	  printf("  s(%d,%d)=%ld.",d,n,s[0]);      //输出和s,w
	  for(j=1;j<=n;j++)
	  printf("%ld",s[j]);
	  printf("\n w(%d,%d)=%ld.",d,n,w[0]);
	  for(j=0;j<=n;j++)
	  printf("%ld",w[j]);
	  printf("\n   和s与w共有%d个小数位对应数字相同.\n",m); 
} 





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值