欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

蓝桥杯算法提高vip试题P0404

程序员文章站 2022-06-12 13:49:59
...

**

首先我们先看下今天这道题

计算一个无符号整数的阿尔法乘积。对于一个无符号整数x来说,它的阿尔法乘积是这样来计算的:如果x是一个个位数,那么它的阿尔法乘积就是它本身;否则的话,x的阿尔法乘积就等于它的各位非0的数字相乘所得到的那个整数的阿尔法乘积。例如,4018224312的阿尔法乘积等于8,它是经过以下的几个步骤计算出来的:
  4018224312à418224312à3072
  3072à372à42
  42à4*2à8
输入:
  4018224312
输出:
  8
**
看到这题当时我心里第一时间想到用数组来解决,不过在审题的时候我就把这个想法否决了因为这个很简单不需要用复杂的数组来解决,直接用一个变量储存每次这个数%10后的值的乘积不就好了么。于是乎开始写代码
第一次`

`import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		System.out.println(arefa(sc.nextInt()));
	}
	static int arefa(int a) {
		int temp=1;
		while(a>0) {
			temp*=a%10==0?1:a%10;//这里有个坑就是如果这个数中如果有0怎么办,我这里直接用三元表达式将0变成1
			a=a/10;
		}
		//上面实现了该数的一次运算,但是我们的输出结果必须是一位数所以我们需要一个判断如下:
		if (temp>9) {
			return	arefa(temp);//当这个数被操作一次后还不是一位数就再次递归这个函数
		}
		return temp;
	}

}

ok?在本地测试了几次发现没问题于是提交了
然后居然看到只有80分
蓝桥杯算法提高vip试题P0404原来是我没考虑周全在等于0的时候没有做处理然后就是当该数为4018224312时居然越界了不能用int来保存了
蓝桥杯算法提高vip试题P0404
算了,????谁让咱没动脑子呢
改好代码

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		System.out.println(arefa(sc.nextLong()));
	}
	static long arefa(long a) {
		if (a==0) {
			return a;
		}
		int temp=1;
		while(a>0) {
			temp*=a%10==0?1:a%10;
			a=a/10;
		}
		if (temp>9) {
			return	arefa(temp);
		}
		return temp;
	}

}

这次就是满分了,唉,下次做题可不能乱来喽

相关标签: java 算法