题目描述
一个整数总可以拆分为2的幂的和,例如: 7=1+2+4 7=1+2+2+2 7=1+1+1+4 7=1+1+1+2+2 7=1+1+1+1+1+2 7=1+1+1+1+1+1+1 总共有六种不同的拆分方式。 再比如:4可以拆分成:4 = 4,4 = 1 + 1 + 1 + 1,4 = 2 + 2,4=1+1+2。 用f(n)表示n的不同拆分的种数,例如f(7)=6. 要求编写程序,读入n(不超过1000000),输出f(n)%1000000000。
输入描述:
每组输入包括一个整数:N(1<=N<=1000000)。
输出描述:
对于每组数据,输出f(n)%1000000000。
示例1
输入
复制
7
输出
复制
6
#include <stdio.h>
#include <cstdio>
#include <string>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <iostream>
using namespace std;
long long dp[1000001];
int main(){
dp[0]=1;
dp[1]=1;
for(int i=2;i<1000001;i++)
{
if(i%2==0)
dp[i]=(dp[i-1]+dp[i/2])%1000000000;
else
dp[i]=dp[i-1];
}
int n;
while(scanf("%d",&n)!=EOF)
{
long long ans=dp[n];
printf("%lld\n",ans);
}
}
题目描述
输入一个正整数N,输出N的阶乘。
输入描述:
正整数N(0<=N<=1000)
输出描述:
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
示例1
输入
复制
4
5
15
输出
复制
24
120
1307674368000
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String []args)
{
Scanner in=new Scanner(System.in);
int n=in.nextInt();
BigInteger b = BigInteger.ONE;
for(int i=n;i>=2;i--)
{
b=b.multiply(BigInteger.valueOf(i));
}
System.out.println(b);
}
}
题目描述
已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k.
输入描述:
若干个非负整数c,c的位数<=30
每行一个c
输出描述:
每一个c的结果占一行
1) 若存在满足 c%k == 0 的k,输出所有这样的k,中间用空格隔开,最后一个k后面没有空格。
2) 若没有这样的k则输出"none"
注意整数溢出问题
不要对-1进行计算
示例1
输入
复制
30
72
13
输出
复制
2 3 5 6
2 3 4 6 8 9
none
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
BigInteger c;
Scanner in = new Scanner(System.in);
c = in.nextBigInteger();
BigInteger k = new BigInteger("2");
BigInteger o = new BigInteger("1");
BigInteger z = new BigInteger("0");
BigInteger k2 = new BigInteger("10");
BigInteger[] str = new BigInteger[30];
int i = 0;
while (k.equals(k2) == false) {
BigInteger x=c.mod(k);
//System.out.println(c);
//System.out.println(k);
//System.out.println(x);
if (x.equals(z)==true) {
str[i++] = k;
}
k=k.add(o);
//System.out.println(k);
}
if (i!= 0) {
for (int j = 0; j < i; j++) {
if(j!=i-1)
System.out.print(str[j]+" ");
else
System.out.print(str[j]);
}
System.out.println();
} else {
System.out.println("none");
}
}
}
题目描述
实现一个加法器,使其能够输出a+b的值。
输入描述:
输入包括两个数a和b,其中a和b的位数不超过1000位。
输出描述:
可能有多组测试数据,对于每组数据,
输出a+b的值。
示例1
输入
复制
2 6
10000000000000000000 10000000000000000000000000000000
输出
复制
8
10000000000010000000000000000000
//package F;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
BigInteger a,b;
a=in.nextBigInteger();
b=in.nextBigInteger();
BigInteger c=new BigInteger("0");
c=a.add(b);
System.out.print(c);
System.out.println();
}
}
题目描述
对N个长度最长可达到1000的数进行排序。
输入描述:
输入第一行为一个整数N,(1<=N<=100)。
接下来的N行每行有一个数,数的长度范围为1<=len<=1000。
每个数都是一个正数,并且保证不包含前缀零。
输出描述:
可能有多组测试数据,对于每组数据,将给出的N个数从小到大进行排序,输出排序后的结果,每个数占一行。
示例1
输入
复制
3
11111111111111111111111111111
2222222222222222222222222222222222
33333333
输出
复制
33333333
11111111111111111111111111111
2222222222222222222222222222222222
//package F;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n;
n=in.nextInt();
BigInteger []str=new BigInteger[101];
for(int i=0;i<n;i++)
{
str[i]=in.nextBigInteger();
}
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(str[i].compareTo(str[j])==1)
{
BigInteger t=str[j];
str[j]=str[i];
str[i]=t;
}
}
}
for(int i=0;i<n;i++)
{
System.out.print(str[i]);
System.out.println();
}
}
}