2006年清华大学计算机研究生机试真题

题目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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值