题目1076:N的阶乘
-
题目描述:
-
输入一个正整数N,输出N的阶乘。
-
输入:
-
正整数N(0<=N<=1000)
-
输出:
-
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
-
样例输入:
-
4 5 15
-
样例输出:
-
24 120 1307674368000
大数运算,利用数组存储结果。
#include<iostream>
using namespace std;
int result[100000];
int main()
{
int n;
while(cin>>n)
{
if(n==0)
{
cout<<"1"<<endl;
continue;
}
int i=0,t=n,len;
while(t)
{
result[i]=t%10;//将n按照从低位到高位的方式存储,因为这样方便后面乘法的进位
t=t/10;
i++;
}
len=i;
for(int i=1;i<n;i++)//从1开始乘到n-1,因为n已经存储到数组中,相当于第一个就是乘nd
{
int c=0;//进位
for(int j=0;j<len;j++)//len的结果数组中目前存储的数占的位数。注意result[0]存储的是结果的个位,依次递增
{
c=result[j]*i+c;
result[j]=c%10;// 每次进行乘法运算都要更新result数组中的每一个元素
c=c/10;
}
while(c)//处理相乘结果的最高位进位,将其存入数组
{
result[len++]=c%10;
c=c/10;
}
}
for(int i=len-1;i>=0;i--)
cout<<result[i];
cout<<endl;
}
return 0;
}
题目1077:最大序列和
-
题目描述:
-
给出一个整数序列S,其中有N个数,定义其中一个非空连续子序列T中所有数的和为T的“序列和”。
对于S的所有非空连续子序列T,求最大的序列和。
变量条件:N为正整数,N≤1000000,结果序列和在范围(-2^63,2^63-1)以内。
-
输入:
-
第一行为一个正整数N,第二行为N个整数,表示序列中的数。
-
输出:
-
输入可能包括多组数据,对于每一组输入数据,
仅输出一个数,表示最大序列和。
-
样例输入:
-
5 1 5 -3 2 4 6 1 -2 3 4 -10 6 4 -3 -1 -2 -5
-
样例输出:
-
9 7 -1
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
long long k,x,sum,b;//只有用long long 才能ac ,long long 的范围(-2^63,2^63-1)
while(cin>>k&&k)
{
cin>>x;
b=sum=x;//首先先输入一个数
for(int i=0;i<k-1;i++)//接着输入k-1个数字
{
cin>>x;
b=max(x,b+x);
sum=max(sum,b);
}
cout<<sum<<endl;
}
return 0;
}