美文网首页Java 核心技术十二点大学@IT·互联网
题目8:求s=a+aa+aaa+aaaa+aa...a的值

题目8:求s=a+aa+aaa+aaaa+aa...a的值

作者: Hughman | 来源:发表于2017-02-12 19:57 被阅读457次

题目:

求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

相关文章

网友评论

  • 爵_27a8:var c = function(a,n){if(n ==0) return 0;
    return +(a.repeat(n)) + +c(a,n-1)}
    使用javascript
    Hughman:@爵_27a8 哦,那我应该是总有大人说你要知道客户端页面,不然没法打配合。哈哈哈
    爵_27a8:我也还是个孩子呀,但是总有大人说你要知道服务端,不然没法打配合,没办法呀。
    Hughman:@爵_27a8 然而我并不是全栈工程师,我还只是个孩子。
  • 灰灰1995:煞风景的问一下楼上这几位,一旦大数之后呢?
    Hughman:第一种方式还是用10的幂次方来计算吧;第二种用迭代的方式,计算本表达式后,后面的再继续用好之前计算好的表达式;其他的有更好的方式也可以说错来,共同学习。
  • yia宁:看见这题,我首先想起的是先手动计算通项再求和得出公式😂
    Hughman:也可以啊,每个人计算方式和思维不一样,你看一楼的就是一个方式。
  • 5822c4c0196e:X + XX + XXX == 3 * X + 2 * (10X) + 1 * (100X)。可以按照这个方法写。
    Hughman:@灰灰1995 第一个想到这种通用方式,但是一旦数字变大,还是要进行表达式计算的。
    灰灰1995: @Andyanet 第一个想到就这样
    Hughman:@鹏嗝儿 !你这方法也是六

本文标题:题目8:求s=a+aa+aaa+aaaa+aa...a的值

本文链接:https://www.haomeiwen.com/subject/ytnaittx.html