java50题----08叠数求和

本文介绍了一种使用Java实现的算法,该算法可以计算形如s=a+aa+aaa+aaaa+aa...a的累加序列值,其中a是一个1到9之间的数字,通过用户输入确定相加的项数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<pre name="code" class="java">/*
 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
 例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
 
 */

import java.io.*;

class Demo
{
	private Demo(){}



	private static Demo d = new Demo();

	public static Demo getInstance()
	{
		return d;
	}
/*
 //例如输入3,5
	public long getSum(String strNum, int times)
	{
		if(times == 0)
		{
			System.out.println("0 ci Ilegal");
			System.exit(0);

		}

		String[] arr = new String[times];
		String str = new String(strNum);
		char[] numChars = new char[times];
		for(int i = 0; i < times; i++)	
			numChars[i] = str.charAt(0);		//nucChars中:'3','3','3','3','3'

		arr[0] = strNum;

		for(int i = 1; i < times; i++)
		{
			arr[i] = new String(numChars, 0, i+1);		//将指定长度的字符数组转变为字符串数组。

		}

		return getArraySum(arr);

	}

// arr 中是 3, 33, 333, 3333, 33333字符串
	private long getArraySum(String[] arr)
	{
		long sum = 0;
		for(int i = 0; i < arr.length; i++)
		{
			sum = sum + Long.parseLong(arr[i]);

		}

		return sum;

	}
	*/
	public long getSum(int num, int times)
	{
		long sum = 0;

		long var = (long)num;
		for(int i = 0; i < times; i++)
		{
			sum += var;
			var = 10*var + num;

		}

		return sum;

	}

	public static void printFunction(Object obj)
	{
		System.out.print(obj.toString());

	}
}


class MainClass
{
	public static void main(String[] args) throws Exception
	{
		Demo d = Demo.getInstance();

		BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));

		String reg = "[1-9]\\s+\\d+";
		String regSpt = "\\s+";
		String[] arr = new String[2];

		int n = 0;
		int times = 0;

		Demo.printFunction("输入一个1到9的数字和重复次数,用空白符分隔:\n");

		for(String str = buf.readLine().trim();true; str = buf.readLine().trim())
		{
			if(str.isEmpty() == true)
				continue;

			if(str.equals("quit") == true)
				System.exit(0);

			if(str.matches(reg) == true)
			{
				arr = str.split(regSpt);
				n = Integer.parseInt(arr[0]);
				times = Integer.parseInt(arr[1]);

				if(times != 0)
					Demo.printFunction("结果为:"+d.getSum(n, times)+"\n");
				else
				{
					Demo.printFunction("重复次数不能为0\n");
				}
			}
			else
			{
				Demo.printFunction("输入一个1到9的数字和重复次数,用空白符分隔:\n");

			}


		}


	}

}

/*
1. 写那么多来处理sum,看了答案去面壁。
 
 */




                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值