import java.util.Scanner; //输入的
网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、成都微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了云岩免费建站欢迎大家使用!
public class ABS { //外面建的点 java的文件名必须和这个一样
public static int a[] = new int[12000];
static void p(int n, int index) //搜索
{
int i;
if(n = 0) //当n为0的时候输出这种情况
{
System.out.print(a[0]);
for(i = 1; i index; System.out.print(" + " + a[i++]));
System.out.print("\n");
return; //返回到函数调用的地方
}
for(i = index 0 (n = a[index - 1]) ? a[index - 1] : n; i 0; i--)
{ //如果 数组下标大于0且 n剩余的值大于等于上一个的值,那么i就等于上一个的值, 否则i就等于n
a[index] = i;
p(n - i, index + 1); //在次调用
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in); //从控制台中读取输入数据
int t;
t = in.nextInt(); //输入一个整数
if(t = 10000)
{
System.out.println("你输入的数据超过1万, 太大咯!!!");
return ;
}
p(t,0);
in.close(); // 关闭输入
return ;
}
}
这个只是可以实现10000 以内的数, 如果想大一点 就把数组开大一点局可以了!
public static void main(String[] args) {
//long a = 123456789L;
long a = new Scanner(System.in).nextLong();
int result = 0;
while (a != 0) {
result += a%10;//取个位数
a /= 10;
}
System.out.println(result);
}
如果没有负整数,一共有 8037 种拆法。
源码:
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.util.Set;
import java.util.TreeSet;
public class Main {
public final static int Sum = 100;
static SetString Combinations = new TreeSet();
public static void main(String[] args) throws IOException {
for (int i1 = 0; i1 = Sum; i1++) {
for (int i2 = 0; i2 = Sum; i2++) {
for (int i3 = 0; i3 = Sum; i3++) {
for (int i4 = 0; i4 = Sum; i4++) {
String s = GetString(new int[] {i1, i2, i3, i4});
if (CheckNumbers(i1, i2, i3, i4)) {
Combinations.add(s);
}
}
}
}
}
System.out.println(Combinations);
System.out.println(Combinations.size());
FileWriter writer = new FileWriter("results.json");
writer.write(Combinations.toString());
writer.flush();
writer.close();
}
public static String GetString(int[] numbers) {
sort(numbers, 0, 3);
return Arrays.toString(numbers);
}
public static void sort(int[] arr,int begin,int end) {
int a = begin;
int b = end;
if (a = b) return;
int x = arr[a];
while (a b) {
while (a b arr[b] = x) b--;
if (a b) {
arr[a] = arr[b];
a++;
}
while (a b arr[a] = x) a++;
if (a b) {
arr[b] = arr[a];
b--;
}
}
arr[a] = x;
sort(arr,begin,a-1);
sort(arr,a+1,end);
}
public static boolean CheckNumbers(int i1, int i2, int i3, int i4) {
return (i1 + i2 + i3 + i4) == Sum;
}
}
设定先定义一个有序数组K,数组K里全是质数,然后用L做被除数,用数组K的元素依次做除数(每次整除后得到的商都继续用这个方法),直到L被完全分解,然后将这些除数存入数组N,接着用数组N里的数相乘(每个元素有且只有使用一次)得到一些乘积,将这些乘积都存入数组M。得到的数组M就是结果