题目:输入a、b,计算平均值,要求a、b、结果都为int,运算过程中不超过int范围
思路:相加过程会超过int范围,使用先取半再相加
代码:answer=a/2+b/2
结果:不超过取值范围,但会造成精度遗失,如a=1、b=1时结果为0
改进:将数的个位与其他位分开计算
详细代码:
结果:不超过取值范围,但会造成精度遗失,如a=1、b=1时结果为0
改进:将数的个位与其他位分开计算
详细代码:
package 算法.思考;
import java.util.Scanner;
//输入a、b,计算平均值,要求a、b、结果都为int,运算过程中不超过int范围
public class AVG {
public static void main(String[] args){
System.out.println("请输入a的值");
Scanner sc = new Scanner(System.in);
int a=sc.nextInt();
System.out.println("请输入b的值");
int b=sc.nextInt();
int a1=0,a2=0,b1=0,b2=0;
//两位数以上
if(Math.abs(a)>9){
//十位
a1=a/10*10;
//个位
a2=a%10;
}
//一位数为本身
else a2=a;
if(Math.abs(b)>9){
b1=b/10*10;
b2=b%10;
}else b2=b;
int answer=a1/2+b1/2+(a2+b2)/2;
System.out.print("平均数为:"+answer);
}
}
结果:输入a=2147483647,b=2,结果为1073741824
输入a=1,b=1,结果为1