⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 9_7jiechen.cpp

📁 vc++编写的一个求大数阶乘的程序 闪点在于边界的处理上
💻 CPP
字号:
#include<iostream.h>
#include<stdio.h>
#include<ctype.h>
#define max 80
#include "time.h"
void main()
{
   clock_t start, finish;
   double  usetime;
	int a[max],b[max];
	int i,j,m,k,r,n;
	char N[3];
	char ch;
	cout<<"***************************************************************"<<endl;
	cout<<"                       求阶乘!                                "<<endl;
	cout<<"  注意:请输入在1到324的范围内的数字,并输入三位有效数字       "<<endl;
	cout<<"  例如,要计算1的阶乘,请输入001,要计算12的阶乘,请输入012    "<<endl;
	cout<<"****************************************************************"<<endl;
	do{
		cout<<"请输入要计算的数字(在1到324的范围内):";
		cin>>N;
		while(int(N[0]-48)<0||int(N[0]-48)>9)
		{  
			cout<<"输入的第一位不是数字!请重新输入!"<<endl;
			cout<<"请输入要计算的第一位数字(在1到324的范围内):";
			cin>>N[0];
		}
		while(int(N[1]-48)<0||int(N[1]-48)>9)
		{  
			cout<<"输入的第二位不是数字!请重新输入!"<<endl;
			cout<<"请输入要计算的第二位数字(在1到324的范围内):";
			cin>>N[1];
		}
		while(int(N[2]-48)<0||int(N[2]-48)>9)
		{  
			cout<<"输入的第三位不是数字!请重新输入!"<<endl;
			cout<<"请输入要计算的第三位数字(在1到324的范围内):";
			cin>>N[2];
		}
		while(int(N[2]-48)+int(N[1]-48)*10+int(N[0]-48)*100<1||int(N[2]-48)+int(N[1]-48)*10+int(N[0]-48)*100>324)
		{
			cout<<"超出范围!请重新输入!"<<endl;
			cout<<"请输入要计算的数字(在1到324的范围内):";
			cin>>N;
		while(int(N[0]-48)<0||int(N[0]-48)>9)
		{  
			cout<<"输入的第一位不是数字!请重新输入!"<<endl;
			cout<<"请输入要计算的第一位数字(在1到324的范围内):";
			cin>>N[0];
		}
		while(int(N[1]-48)<0||int(N[1]-48)>9)
		{  
			cout<<"输入的第二位不是数字!请重新输入!"<<endl;
			cout<<"请输入要计算的第二位数字(在1到324的范围内):";
			cin>>N[1];
		}
		while(int(N[2]-48)<0||int(N[2]-48)>9)
		{  
			cout<<"输入的第三位不是数字!请重新输入!"<<endl;
			cout<<"请输入要计算的第三位数字(在1到324的范围内):";
			cin>>N[2];
		}
		}
		n=int(N[2]-48)+int(N[1]-48)*10+int(N[0]-48)*100;
		if(n==1)   cout<<"1!=1";
		else{
			   start = clock();
		for(i=0;i<max;i++)
			a[i]=0;
		a[0]=1;
		for(j=2;j<=n;j++)
		{
			for(i=0;i<max;++i)
				b[i]=a[i];
			for(m=1;m<j;++m)
				for(i=0;i<max;++i)
				{
					r=a[i]+b[i];
					if(r>9)    a[i+1]++;
					a[i]=r%10;
				}
				k=max-1;
				while(a[k]==0)
					k--;
		}
		cout<<n<<"!=";
		for(i=k;i>=0;i--)
			cout<<a[i];
		}
		 finish = clock();
		usetime= (double)(finish - start) / CLOCKS_PER_SEC;
		cout<<endl<<"程序用时"<<usetime<<"秒"<<endl;
		cout<<endl<<"是否继续?[y/n]";
		cin>>ch;
	}while((ch=='y')||(ch=='Y'));
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -