要求输入一个正整数,之后输出该数的各位数字。如:输入123,输出1,2,3
-
题目分析:要想拆分一个整数,首先要确认它的位数,之后再根据规律逐个拆分各位。
-
确认整数位数,就要使用Java中的length()函数,该函数可以计算出一个字符串类型的位数(注:空格也会算作一位),如:
String a="Hello World";
System.out.println(a.length());
所以,我们只需要让输入的整数变成字符型就可以算出它的位数。
int a=123456;
System.out.println((a+"").length());
除此之外,也可以通过编写方法计算位数:
public static void main(String[] args) {
int count = 0;
Scanner scanner=new Scanner(System.in);
int integer=scanner.nextInt();
while(integer>1)
{
integer=integer/10;//不断除10,每除一次令计数器加一
count++;
}
System.out.println(count+1);
}
- 之后,便需要分析整数拆分的规律:
由图片可以看出,要拆分一个整数a,除了最高位,从个位开始的规律是(a%10^n) / 10^n-1。
而设a的位数为b,则最高位便等于:a / 10^b-1
4.此时又有了新的问题,那就是怎么求一个数的次方?这个只需单独写一个方法就可以了
public static int Power(int x,int y)//求x的y次方
{
if (y==0)
{
return 1;//0次方统一为1
}
int sum=x;
for (int i = 1; i <y; i++) {
sum*=x;//累乘
}
return sum;
}
5.解决了所有问题后,就可以开始写代码了:
public static void IntegerDisassemble(int x)
{
int digit=(x+"").length();//计算x的位数
int[] array=new int[digit];
for (int i = 0; i <digit-1; i++)
//从个位开始,逐个拆分整数
{
array[i]=(x%(Power(10,i+1))/(Power(10,i)));//注意括号
}
array[digit-1]=x/Power(10,digit-1);//最高位单独求出
System.out.println("该数的拆分结果为:");
for (int i = digit-1; i > -1 ; i--)
//由于时从个位开始拆分的,所以要倒叙输出
{
if (i==0)
{
System.out.print(array[i]);
return;
}
System.out.print(array[i]+",");
}
}
本题结束,以下附上完整代码:
public class Practice {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.print("请输入要拆分的整数:");
int integer=scanner.nextInt();
IntegerDisassemble(integer);
}
public static void IntegerDisassemble(int x)
{
int digit=(x+"").length();
int[] array=new int[digit];
for (int i = 0; i <digit-1; i++) {
array[i]=(x%(Power(10,i+1))/(Power(10,i)));
}
array[digit-1]=x/Power(10,digit-1);
System.out.println("该数的拆分结果为:");
for (int i = digit-1; i > -1 ; i--) {
if (i==0)
{
System.out.print(array[i]);
return;
}
System.out.print(array[i]+",");
}
}
public static int Power(int x,int y)//求x的y次方
{
if (y==0)
{
return 1;
}
int sum=x;
for (int i = 1; i <y; i++) {
sum*=x;
}
return sum;
}
}