题目:
求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
程序分析:
关键是计算出每一项的值。
方法1程序代码:
package com.ljy.tencent;
import java.util.Scanner;
/**
* 题目:求s=a+aa+aaa+aaaa+aa...a的值,
* 其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
* 程序分析:关键是计算出每一项的值。
* @author liaojianya
* 2016年10月3日
*/
public class AddNumerical
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println("请输入一个数字:");
int n = input.nextInt();
System.out.println("请输入需要相加的个数:");
int number = input.nextInt();
input.close();
//调用计算方法
System.out.println("计算输出结果为:");
System.out.print("s=");
System.out.print(count(n, number));
}
//求和表达式以及求和
public static int count(int n, int number)
{
int s = 0;//s为每一个叠数
int sum = 0;//sum为最后的总和
//循环从1次幂到number次幂的叠数
for(int i = 1; i <= number; i++)
{
//调用形成叠数的方法
s = coumpute(n, i);
//利用if...else区分是否为最后一个加数,从而保证最后一个数后面不添加"+"
if(i == number)
{
System.out.print(s);
}
else
{
System.out.print(s + "+");
}
sum += s;
}
System.out.print("=");
return sum;
}
//叠数的形成
public static int coumpute(int n, int number)
{
int m = 0;
for(int i = 0; i < number; i++)
{
//从0次幂到number次幂形成叠数,如22222=2*10^4+2*10^3+2*10^2+2*10^1+2*10^0
m += (int) (n * Math.pow(10, i));
}
return m;
}
}
方法2程序代码:
package com.ljy.tencent;
import java.util.Scanner;
/**
* s = a + aa + aaa + aaaa + ... +
* @author liaojianya
* 2016年10月3日
*/
public class AddNumberical2
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in).useDelimiter("\\s*");//以空格作为分隔符
System.out.println("请输入:s=a+aa+aaa...中的a:");
int a = input.nextInt();
System.out.println("请输入最后一个aaa...的个数:");
int n = input.nextInt();
input.close();
System.out.println(expressed(a,n)+add(a,n));
}
//求和表达式
public static String expressed(int a, int n)
{
StringBuffer ss = new StringBuffer();
StringBuffer sub = new StringBuffer();
for(int i = 1; i < n+1; i++)
{
sub = sub.append(a);
ss = ss.append(sub);
if(i < n)
{
ss = ss.append("+");
}
}
ss.append("=");
return ss.toString();
}
//求和
public static long add(int a, int n)
{
long sum = 0;
long sub = 0;
for(int i = 1; i < n+1; i++)
{
sub = sub * 10 + a;
sum += sub;
}
return sum;
}
}
结果输出:
请输入一个数字:
2
请输入需要相加的个数:
5
计算输出结果为:
s=2+22+222+2222+2222=24690