A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 毋须繁华 中级黑马   /  2013-8-31 13:46  /  1133 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 毋须繁华 于 2013-8-31 15:03 编辑

下面两个题好像原理差不多,但是我看的很迷糊……求给加个注释。


求Sn=a+aa+aaa+…+aa…a(n个a)之值,其中a是一个数字,n 表示a的位数,例如:
2+22+222+2222+22222(此时n=5)  
  long a =2;
  int n = 5;
  int i = 0;
  long b = 0, sum = 0;
   while(i < n) {
    b = b + a;      //b存储的值为
      sum = sum + b;
      a = a * 10;
      i++ ;
    }
   System.out.println(sum);

求1! + 2! + 3! + 4! + 5! + …… + 15!  ; !表示:例如5!代表5*4*3*2*1

  long sum = 0;
  long b = 1;
  for(int i=1;i<=15;i++){
   b=b*i;
   sum=sum+b;
  }
  System.out.println("1! + 2! + 3! + 4! + 5! + …… + 15!的值为"+sum);

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 张云飞 于 2013-8-31 14:46 编辑
  1.   //Sn=A1+A2+A3+A4+...+An = A1 + (A1*10+A1) + (A1*100+A2) + ...
  2. long a =2;
  3. int n = 5;
  4. int i = 0;//循环使用
  5. long b = 0,// An的值
  6.          sum = 0;//Sn的值
  7. while(i < n) {
  8.                
  9.             b = b + a;      //求出当前项的值。第一个b存储的值为An,即对应每一项的值;第二个b存储的为上一项即A(n-1)。比如2+22+222=(2+0) + (20+2) + (200+22)
  10.             sum = sum + b;
  11.                      
  12.             a = a * 10;        
  13.             i++ ;
  14.   }
  15. System.out.println(sum);
复制代码
第二个相对简单点了,
  1. long sum = 0;
  2. long b = 1;//每一项的值
  3. for(int i=1;i<=15;i++){
  4.               b=b*i;//第一个b,当前项的值;第二个b,上一项的值。
  5.               sum=sum+b;
  6. }
  7. System.out.println("1! + 2! + 3! + 4! + 5! + …… + 15!的值为"+sum);
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
1、
  1. //                2+22+222+2222+22222(此时n=5)  
  2.                   long a =2;      //定义a,代表此时要加的值的最前一位数
  3.                   int n = 5;
  4.                   int i = 0;
  5.                   long b = 0, sum = 0;  //定义b,代表此时要加的数除去第一位的后几位数
  6.                    while(i < n) {   
  7.                     b = b + a;      //此时b等于这次要加的数,也是下一次要加的数除去第一位的后几位数
  8.                       sum = sum + b;     
  9.                       a = a * 10;   //此时a等于下一次要加的数的最前一位数
  10.                       i++ ;   
  11.                     }
  12.                    System.out.println(sum);
复制代码
2、
  1. long sum = 0;
  2.            long b = 1;
  3.            for(int i=1;i<=15;i++){
  4.             b=b*i;    //第i次就加上i的阶乘,比如第3次,b=1*2*3,第四次就在乘以4就是4!
  5.             sum=sum+b; //从1的阶乘加到15的阶乘
  6.            }
  7.            System.out.println("1! + 2! + 3! + 4! + 5! + …… + 15!的值为"+sum);
复制代码
希望有帮助!

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
  1. public class GetSum
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 long a = 2;
  6.                 int n = 5;
  7.                 int i = 0;
  8.                 long b = 0, sum = 0;
  9.                 while (i < n)
  10.                 {
  11.                         b = b + a; // b存储的为本次循环应该加的值
  12.                         sum = sum + b;
  13.                         a = a * 10; // a存储的是下次循环要加的数字的最高位
  14.                         i++;
  15.                         System.out.println("第" + i + "次循环:" + "b=" + b);
  16.                         System.out.println("第" + i + "次循环:" + "a=" + a);
  17.                 }
  18.                 System.out.println(sum);
  19.         }

  20. }
复制代码
呵呵 ,楼主应该也是零基础吧,给你加了两行输出语句,希望对你有帮助,第二个试着自己动手试试,加油。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马