黑马程序员技术交流社区

标题: for 循环递增问题 [打印本页]

作者: Tesla时光    时间: 2012-9-5 22:50
标题: for 循环递增问题
本帖最后由 翁发达 于 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);
        }
}

作者: 黑马_许芸    时间: 2012-9-5 22:58
题目没说清楚。x是一个任意的整数呢,还是0-9之间的整数?最后的“xx....x“是多少位?是x位吗?
作者: 杨习平    时间: 2012-9-5 23:03
本帖最后由 杨习平 于 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-5 23:03
黑马_许芸 发表于 2012-9-5 22:58
题目没说清楚。x是一个任意的整数呢,还是0-9之间的整数?最后的“xx....x“是多少位?是x位吗? ...

先回答你的。比如x=5;那就5个数相加。
5+55+555+5555+55555
作者: 夏天    时间: 2012-9-5 23:14
夏诗瑶 发表于 2012-9-5 23:03
先回答你的。比如x=5;那就5个数相加。
5+55+555+5555+55555

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

看错题了,回答错了,不好意思啦~~~ 别见笑
作者: 袁艳超    时间: 2012-9-6 00:00
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);
        }
}
作者: 梁志冰    时间: 2012-9-6 00:24
本帖最后由 梁志冰 于 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
              .....
         以此类推


         


作者: 杨卫腾    时间: 2012-9-6 00:25
  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:00
本帖最后由 吴兵 于 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);

        }
}


作者: 张飞年    时间: 2012-9-6 02:19
本帖最后由 张飞年 于 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. }
复制代码

作者: Tesla时光    时间: 2012-9-6 07:58
梁志冰 发表于 2012-9-6 00:24
public class Test {
  public static void main(String[] args) {
  Scanner sc = new Scanner(System.in) ...

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

代码怎么才能贴成这样格式的?求教
作者: 杨习平    时间: 2012-9-7 00:11
难道就错了吗。至少没错啊。无语。。
作者: 舒远    时间: 2012-9-7 00:11
  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. }
复制代码
这道题也可以用递归来实现一下。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2