一、整数分隔
使用递归的话肯定会溢出,只能用迭代
import java.util.Scanner;
public class Main {
// public static long foo(int n)
// {
// if(n==1)
// return 1;
// else
// {
// if(n%2==0)
// return foo(n-1)+foo(n/2);
// else
// return foo(n-1);
// }
// }
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
while (s.hasNextInt()) {
int n = s.nextInt();
int[] f = new int[1000001];
f[1] = 1;
for (int i = 2; i <= n; i++) {
if (i % 2 == 0)
f[i] = (f[i - 1] + f[i / 2]) % 1000000000;
else
f[i] = f[i - 1];
}
System.out.println(f[n]);
}
}
}
二、大数求和
位操作法http://blog.csdn.net/wtyvhreal/article/details/42028825
Java的BigDecimal类http://blog.csdn.net/wtyvhreal/article/details/42443189
三、整数排序
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
string str;
cin >> str;
vector< int > ivec;
int len = str.size();
int bi=0,ei=0,num=0,dim=1;
for(int i=0; i < len; i++)
{
if(str[i] == ',' || i == len-1)
{
ei = i;
if(i == len-1)
ei=len;
while(ei > bi)
{
num += (str[--ei]- '0')*dim;
dim *= 10;
}
ivec.push_back(num);
num=0;
dim=1;
bi=i+1;
}
}
sort(ivec.begin(),ivec.end());
int min_num = 0, max_num = 0;
int len1 = ivec.size();
for(int i=0; i < len1; i++)
{
min_num =max_num = ivec[i];
cout << min_num << " ";
while( ivec[i+1] - 1 == ivec[i])
{
max_num = ivec[i+1];
i++;
}
if( max_num != min_num)
cout << max_num << " ";
}
ivec.clear();
return 0;
}
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
while (s.hasNext()) {
String str = s.nextLine();
String[] num = str.split(",");
int[] a = new int[num.length];
for (int i = 0; i < num.length; i++) {
a[i] = Integer.valueOf(num[i]);
}
Arrays.sort(a);
int min_num = 0, max_num = 0;
for (int i = 0; i < a.length; i++) {
min_num = max_num = a[i];
System.out.print(min_num + " ");
if (i == a.length - 1)
break;
while (a[i + 1] - 1 == a[i]) {
max_num = a[i + 1];
i++;
if (i == a.length - 1)
break;
}
if (max_num != min_num)
System.out.print(max_num + " ");
}
}
}
}