两天一题-leetCode-各位相加

5 篇文章 0 订阅
5 篇文章 0 订阅

两天一题系列:

准备鞭策自己瞎做个两天一题系列,关于每题写一篇感悟和理解。

题目:
摘自力扣,题号258。
假设给定数为非负整数,将该非负整数各位相加,直至最终相加之和为一位数,返回这个一位数。

知识点:
A 循环(循环相加给定数各个位,直至返回数为0)
B 数组(若采取将给定数的每个数都放入数组中,依次相加)

思路:

Ⅰ:利用数组

  • 定义一个数组,将给定数的各个位上的数历遍放在数组中。
  • 将数组中的每位相加,并将结果再次放入这个数组中。
  • 判断数组的长度是否为1,若为1,则返回该数组中的数;若不为1,则循环步骤1、2。

Ⅱ:普通循环:

  • 利用取余取整的方法循环将给定数及计算后的各位相加相加。

脑子做到了,代码做不到,真码起来觉得思路又不对。那个啥,一天看题目,一天闭环。
未闭环代码:

static int getNum(int addNum) {
  //先尝试将两位数相加
//  int a = 0;//放取余的数
  int num = 0;//两数之和
   while(addNum > 10) {//递进应该是?
    addNum = addNum/10;
    num += addNum%10;
    System.out.println("addNum:"+addNum+"addNum/10:"+addNum/10);
    System.out.println("num:"+num+"addNum%10:"+addNum%10);
     if(num < 10) {
      return num;
     }else {
      num = addNum;
     }
   }
  return num;
 }


11-27:闭环
知识点:

  • 取整:以下即为取整,设b=32409,则numN=3240。
int numN = b/10;
  • 取余:以下为取余,设b=32409,则num = 9。
int num = b%10;

扩展:
只能完成一次循环,将给定数各个位数相加,并返回相加的值,但不能完成将给定数各个位数持续相加,直至返回值为一位数。
将给定数各个位数相加并返回这个和的程序如下:
我一定缺少了能使该循环再次循环的条件
思路:
真是笨方法!

  • 依次相加给定数的各个位上的数,并将结果记录在新的变量中,且这个变量为该方法的返回值。
  • 在循环内判断相加后的结果是否<10。若小于10,则返回该数;若不小于10,则另给定数的变量等于这个新的变量,且初始化这个变量后进入新一轮循环。
  • 直至相加各个位上的数小于10.
    注意:
    需对给定数进行大于10的判断,若给定数小于10,则另新变量直接等于给定数,并返回即可。
    代码:
static int getNum(int addNum) {
	//先尝试将两位数相加
	int num = 0;//两数之和
	int numN = 0;
if(addNum < 10) {
return addNum;
}
while(addNum >= 10) {//递进应该是?
numN = addNum/10;
System.out.println("addNum:"+numN);
num += addNum%10; 
System.out.println("num:"+num);
addNum = addNum/10;
if(addNum < 10) {
num += addNum;
if(num > 10) {
addNum = num;//若num大于10,则
num = 0;//将num初始化
}else if(num == 10){
num = 1;
return num;
}
}
} 
return num;
}

结果如下:
在这里插入图片描述


还需再闭环。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值