java求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+2....(java50道经典编程题)

题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

对于这个题目来说还是比较简单的不过我在编码过程中好像漏了点东西,调试了几遍才好,这个题无非就是先输入而后每一位要比前一位多乘10的一次方,在加起来就稳了最后要求和所以记得每一轮要加两次。

import java.util.Scanner;
//连续相加求和
public class Con_addition {
  public static void main(String [] args) {
	  System.out.println("请输入原始的数字");
	  Scanner scanner = new Scanner(System.in);
	  int a = scanner.nextInt();
	  System.out.println("请输入要相加的个数");
	  int n = scanner.nextInt();
	  int z = 0;
	  int h = 0;
	  for(int i = 0; i<n; i++) {
		  int f = (int) Math.pow(10, i);
		  int m = a*f;
//		  System.out.println(m);
		  z += m;
		  h += z;
	  }
	  System.out.print(h);
  }
}

在这里插入图片描述
老规矩上大神代码:

public static long no8(int a,int n) {
		long num1 = a;//每个加数
		long num2 = 0;//和
		//循环加
		for(int i = 0;i < n;i++) {
			System.out.println(num1 + "+");
			num2 += num1;
			//改变加数
			num1 *= 10;
			num1 += a;
		}
		return num2;
	}

大神代码有一个细节不知道大家发现了没有,没错大神的数据是long类型的因为到后面数据很可能出现溢出现象。
下面我再来输入一个比较大的数再分别跑一下我的代码和大神的代码。
首先是大神的:
在这里插入图片描述
然后是我的:
在这里插入图片描述
我的最后都出现了负值,这就是int的长度不够了溢出造成的

  • 12
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 这个式子可以写成:s=a+(a*10+a)+(a*100+a*10+a)+...+(a*10^(n-1)+a*10^(n-2)+...+a) 可以发现,每一项都是由前一项乘以10再加上a得到的,因此可以得到以下递推式: s = a + (a+10a) + (a+10a+100a) + ... + (a+10a+100a+...+10^(n-1)a) = a + 11a + 111a + ... + (10^n-1)/9*a 化简得: s = a*(10^n-1)/9 + a*(1+11+111+...+(10^n-1)/9) 对于第二项,可以使用等比数列和公式: 1+11+111+...+(10^n-1)/9 = (10^n-1)/9 * (1+10+10^2+...+10^(n-1)) = (10^n-1)/9 * (10^n-1)/9 代入得: s = a*(10^n-1)/9 + a*(10^n-1)/81 化简得: s = a*(10^n+8)/81 ### 回答2: 这问题的关键在于找到数列s的规律,然后利用该规律解s的。 首先,我们可以尝试手动计算一些数列的前几项来寻找规律。假设a=2,则数列s的前几项为2, 22, 222, 2222, 22222, ...。显然,这是一个无穷级数,我们需要找到该级数的通项公式时确切地出s的。 通过观察数列s的前几项,我们可以猜测数列的第n项可以写成n个a相加的形式,即s(n)=a + aa + aaa + ... + a(n个a)。例如,当n=4时,数列的第4项为a + aa + aaa + aaaa=2 + 22 + 222 + 2222=246。 为了验证该推测,我们可以尝试递归地计算数列s的前几项。假设已知s(1)=a,则s(2)=s(1) + aa=a + aa,s(3)=s(2) + aaa=a + aa + aaa,以此类推。因此,可以得出数列s的通项公式如下: s(n) = a + aa + aaa + ... + a(n个a) = a × (1 + 11 + 111 + ... + 1(n-1个1)) 现在,问题转化为了如何1+11+111+...+1(n-1个1)的。通过观察该数列的前几项,我们可以猜测该数列是一个等比数列,首项为1,公比为10,共有n项。因此,该数列的和可以用等比数列和公式来表示: S = 1 + 11 + 111 + ... + 1(n-1个1) = (1 - 10^n) / (1 - 10) 将上式代入s(n)的公式中,则得到: s(n) = a × (1 + 11 + 111 + ... + 1(n-1个1)) = a × (1 - 10^n) / (1 - 10) 因此,数列s的可以用上式计算得出。例如,当a=2,n=4时,s(4)=2 × (1 - 10^4) / (1 - 10) = 246。 综上所述,对于数列s=a + aa + aaa + ... + a(n个a),其中a为一个数字,其可以通过数列的递推关系式和等比数列和公式来得。 ### 回答3: 这题目需要我们找到一个通项公式,才能出s的。首先,可以根据s的形式发现,它是一个等比数列的和,即: s = a + aa + aaa + aaaa + ... 假设这个等比数列的首项是a,公比是r,则有: a + ar + ar^2 + ar^3 + ... 因为|r| < 1,所以上式是一个收敛的无穷等比数列,其和为: s = a/(1-r) 现在的问题是如何出公比r。可以发现,从第二项开始,每一项都是在前一项的基础上加上一个a,这可以用数学归纳法来证明。这就意味着,从第二项开始,每一项都是前一项乘以一个r,且r = 10。因为每个a都被当作一个十进制数中的数字来处理,所以r的是10。因此,可以得到: s = a/(1-10) = -a/9 因此,当a不等于0时,s的为-a/9。 需要注意的是,当a等于0时,s的为0,因为所有项都为0。另外,当a为负数时,s的也是负数,因为公比r是正数。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值