计算一个正整数各位和直到和小于10 问题

qq_41333485 2018-06-08 10:23:32
如:49:4+9=13,1+3=4

public static int addToOne(int num){
int sum=0;
while(num!=0){
sum+=num%10;
num/=10;
}
if(sum>10){
addToOne(sum);
}
return sum;
}

返回结果不正确 debug下 到返回sum 再下一步怎么又到了addToOne(sum)
...全文
1515 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bbjiabcd 2018-06-21
  • 打赏
  • 举报
回复

public static int addToOne(int num){
int sum=0;
while(num!=0){
sum+=num%10;
num/=10;
}
if(sum>10){
sum=addToOne(sum); //addToOne(sum);
}
return sum;
}


加个"sum="就好
lei36180 2018-06-21
  • 打赏
  • 举报
回复
// 正确的
public static int addToOne(int num){
int sum = 0;
while(num!=0){
sum+=num%10;
num/=10;
}
return sum>10?addToOne(sum):sum;//如果大于10继续掉,不是则返回值,最终return的值就是你要的值
}

// 你的
public static int addToOne(int num){
int sum=0;
while(num!=0){
sum+=num%10;
num/=10;
}
if(sum>10){
addToOne(sum);
}
return sum;//你的sum一直是你本次调用中的sum,他不会随着再次调用而改变
}

廉月程 2018-06-09
  • 打赏
  • 举报
回复
引用 楼主 qq_41333485 的回复:
如:49:4+9=13,1+3=4
public static int addToOne(int num){
		int sum=0;
		while(num!=0){
			sum+=num%10;
			num/=10;
		}
		if(sum>10){
			addToOne(sum);
		}
		return sum;
	}
返回结果不正确 debug下 到返回sum 再下一步怎么又到了addToOne(sum)
其实你写的逻辑没有问题 只是if(sum>10)时 要return addToOne(sum); 不然后return下面的结果
廉月程 2018-06-09
  • 打赏
  • 举报
回复
引用 3 楼 u013853871 的回复:
public static int addToOne(int num) { /** * 1,取个位; * 2,取十位; * 3,将个位和十位相加; * 4,将相加结果传给函数,再判断是否大于10,是就再拆分,不是就返回结果; * 5,考虑这个数据如果大于99,就变成三位数了,要再进行判断处理; */ if(num > 99) { num = num % 100; } int a = num % 10; int b = (num - a) / 10; int result = a + b; while(result > 10) { result = addToOne(result); } return result; }
int b = (num - a) / 10; 这个num-a有啥意义吗? 直接用num/10就好 int类型除以int类型得int类型
廉月程 2018-06-09
  • 打赏
  • 举报
回复
public static int addToOne(int num){
        int c = num % 100; // 当num>99时,取各位和10位

        int a = c / 10 ; // 10位
        int b = c % 10;  // 各位
        int rslt = a + b;
        if(rslt >= 10 ){
            rslt = addToOne(rslt);
        }
        return rslt;
    }
qq_41333485 2018-06-08
  • 打赏
  • 举报
回复
引用 1 楼 tp 的回复:
public static int addToOne(int num){
	int c = num - (num % 100); // 当num>99时,取各位和10位
	
	int a = num % 10 ; // 10位
	int b = num - a ;  // 各位
	int rslt = a + b;
	if(rslt >= 10 ){
		rslt = addToOne(rslt);
	}
	return rslt;
}
你这死循环啊。。个位 十位取的也不对。。
tp 2018-06-08
  • 打赏
  • 举报
回复
public static int addToOne(int num){
	int c = num - (num % 100); // 当num>99时,取各位和10位
	
	int a = num % 10 ; // 10位
	int b = num - a ;  // 各位
	int rslt = a + b;
	if(rslt >= 10 ){
		rslt = addToOne(rslt);
	}
	return rslt;
}
heitaoc 2018-06-08
  • 打赏
  • 举报
回复
public static int getNum(int num){
		String[] s=Integer.toString(num).split(""); 
		int sum=0;
		for(int i=0;i<s.length;i++){
			sum+=Integer.parseInt(s[i]);
		}
		if(sum>10){
			return getNum(sum);
		}
		return sum;
	}
  • 打赏
  • 举报
回复
public static int addToOne(int num){ int sum=0; while(num!=0 && num < 100){ sum = num%10 + num/10; num/=10; } if(sum>10){ sum = addToOne(sum); } return sum; }
追梦者Lea 2018-06-08
  • 打赏
  • 举报
回复
public static int addToOne(int num) { /** * 1,取个位; * 2,取十位; * 3,将个位和十位相加; * 4,将相加结果传给函数,再判断是否大于10,是就再拆分,不是就返回结果; * 5,考虑这个数据如果大于99,就变成三位数了,要再进行判断处理; */ if(num > 99) { num = num % 100; } int a = num % 10; int b = (num - a) / 10; int result = a + b; while(result > 10) { result = addToOne(result); } return result; }

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧