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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Tesla时光 中级黑马   /  2012-9-5 22:50  /  3136 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 翁发达 于 2012-9-6 07:58 编辑

问题:是我随机输入一个整数x,求x+x*x+x*x*x+x*x*x*x+x*x....*x的和,x多少,就有多组数相加
比如我输入一个3,那么就是求3组数相加:3+3*3+3*3*3  这个的和是多少?
下题是我能写到for循环,但结果总是不对,请问我哪里写错了?
import java.util.*;
class Sum
{
        public static void main(String[] args)
        {
                Scanner sc = new Scanner(System.in);
               
                int x =sc.nextInt();
                int sum =x;
                for (int y = 1;y<=x ;y++ )
                {
                        for (int z =1;z<y ;z++ )
                        {
                                
                                        x*=x;
                                        sum+=x;
                                
                                
                        }
                }
                System.out.println(sum);
        }
}

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

14 个回复

倒序浏览
题目没说清楚。x是一个任意的整数呢,还是0-9之间的整数?最后的“xx....x“是多少位?是x位吗?
回复 使用道具 举报
本帖最后由 杨习平 于 2012-9-5 23:22 编辑

import java.util.*;
class Sum
{
        public static void main(String[] args)
        {
             Scanner sc = new Scanner(System.in);
                             int x = sc.nextInt();
                             int sum = 1;
                            int sum2=0;
                            for (int y = 1; y <= x; y++) {
                              for (int z = 1; z <= x; z++) {
                                       sum *= x;
                                       sum2+=sum;
                                   }
   
                              System.out.println(sum2);
                                if (y < x) {
                                        break;
                                        }
                     }
      }
}
看看这样可以吗,你要看看是不是有打印的条件和结束的条件,

点评

怎么看也不需要双重循环  发表于 2012-9-6 09:24
回复 使用道具 举报
黑马_许芸 发表于 2012-9-5 22:58
题目没说清楚。x是一个任意的整数呢,还是0-9之间的整数?最后的“xx....x“是多少位?是x位吗? ...

先回答你的。比如x=5;那就5个数相加。
5+55+555+5555+55555
回复 使用道具 举报
夏诗瑶 发表于 2012-9-5 23:03
先回答你的。比如x=5;那就5个数相加。
5+55+555+5555+55555

我看错题了,忙着聊天 sorry
回复 使用道具 举报
黑马_许芸 发表于 2012-9-5 22:58
题目没说清楚。x是一个任意的整数呢,还是0-9之间的整数?最后的“xx....x“是多少位?是x位吗? ...

看错题了,回答错了,不好意思啦~~~ 别见笑
回复 使用道具 举报
class Sum {

        public static void main(String[] args) {
                System.out.println("请输入一个整数:");
                Scanner sc = new Scanner(System.in);
                int x = sc.nextInt();
                int sum = x;
                for (int i = 0; i < x-1; i++) {
                        sum =sum + (int)(Math.pow(x, i+2));  //Math类中有次幂pow的方法
                }
                System.out.println(sum);
        }
}

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 梁志冰 于 2012-9-6 00:37 编辑

public class Test {
  public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  int x =sc.nextInt();
  System.out.println("你输入的整数是: "+x);
  int total=0;
  int stepSum=1;
  for(int i=1;i<=x;i++)
  {
   stepSum*=x;
   total+=stepSum;
  }
     System.out.println(total);
}
}

分析规律:
x^1+x^2+x^3+...+x^x
其实x^2=(x^1)*x
       x^3=(x^2)*x
       .....
      x^x=(x^(x-1))*x
那么我们定义变量stemSum=1,
         第1次循环   stemSum=(1*x)
         第2次循环   stemSum=(1*x)*x
         第3次循环   stemSum=(1*x*x)*x
              .....
         以此类推


         

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  1. import java.util.*;

  2. class Sum
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 System.out.println("请输入数值:");
  7.                 Scanner sc = new Scanner(System.in);
  8.                 int value =sc.nextInt();

  9.                 int sum = 0;
  10.                
  11.                 for (int y = 1;y<=value ;y++ )
  12.                 {       
  13.                         sum = sum + (int)Math.pow(value,y);
  14.                 }
  15.                 System.out.println(sum);
  16.         }
  17. }
复制代码
这个是用了java中的Math类中的 有关于pow方法实现的,可以得到具体的结果。
回复 使用道具 举报
本帖最后由 吴兵 于 2012-9-6 01:13 编辑

/**
* 问题:随机输入一个整数x,求x+x*x+x*x*x+x*x*x*x+x*x....*x的和,x多少,就有多组数相加。
         比如输入一个3,那么就是求3组数相加:3+3*3+3*3*3  这个的和39?
*/
package bbs;
import java.util.*;

class Sum
{
        public static void main(String[] args)
        {
           Scanner sc = new Scanner(System.in);//构造一个Scanner对象,其传入参数为System.in

            System.out.println("请输入一个整数:");//取小于10的数,否则溢出

            int x =sc.nextInt();//读取一个int数值

            //方法一 :使用pow方法求幂
//              int sum = x;
//              for (int i = 0; i < x-1; i++)
//              {
//                      sum =sum + (int)(Math.pow(x, i+2));  
//              }
//              System.out.println(sum);


           //方法二:使用for循环
            int sum=0;
            int tmp = 1;
            for(int i = 1; i <= x; i++)
            {
                    tmp *= x;
                sum += tmp;
            }

            System.out.println(sum);

        }
}

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 新人回帖 多多鼓励

查看全部评分

回复 使用道具 举报
本帖最后由 张飞年 于 2012-9-6 02:23 编辑

      看了楼主的问题,也尝试修复你的代码,但是太晚了,脑袋麻木了,根据我的思路给你写个,只用一个循环,结果正确。
    给楼主给个我自己用的小办法,画过程,比如我输入3,自已代进变量细心模拟过程,就能找到错误,还能练习自己的逻辑思维。现在脑袋麻木,得睡觉了,就不打上楼主的程序模拟过程了,因为我已经在纸上画了一遍,写起来格式太多 。
  1. import java.util.Scanner;

  2. public class Test {
  3.         public static void main(String[] args) {
  4.                 Scanner sc = new Scanner(System.in);//输入
  5.                 int x = sc.nextInt();
  6.                 System.out.println(method(x));//方法,也可单独提出来
  7.         }

  8.         public static int method(int a) {
  9.                 int b = a;
  10.                 int sum = a;
  11.                 for (int j = 1; j < a; j++) {//主要的思路就是跳过第一轮(直接放到sum里面加上就行),剩下的a-1轮算术迭代,再累加上就好了
  12.                         b = b * a;
  13.                         sum = sum + b;
  14.                 }
  15.                 return sum;
  16.         }
  17. }
复制代码
回复 使用道具 举报
梁志冰 发表于 2012-9-6 00:24
public class Test {
  public static void main(String[] args) {
  Scanner sc = new Scanner(System.in) ...

谢了,这个思路分析的挺好,我一看就懂了,这个问题已解决,也感谢其他朋友的帮助
回复 使用道具 举报
杨卫腾 发表于 2012-9-6 00:25
这个是用了java中的Math类中的 有关于pow方法实现的,可以得到具体的结果。

代码怎么才能贴成这样格式的?求教
回复 使用道具 举报
难道就错了吗。至少没错啊。无语。。
回复 使用道具 举报
舒远 黑马帝 2012-9-7 00:11:21
15#
  1. public class digui{
  2.         public static void main(String[] args){
  3.                 int d = 4;//题中的X值
  4.                 double a = sum(d,d);//递归求值
  5.                 System.out.println(a);
  6.         }
  7.        
  8.         public static double sum(int a,int i){
  9.                 //处理小于零的情况
  10.                 if(i <= 1){
  11.                         return a;
  12.                 }
  13.                 return Math.pow(a, i) + sum(a, --i);
  14.         }
  15. }
复制代码
这道题也可以用递归来实现一下。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马