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

📄

📁 西电的VC++课上的几个通用模板,完全是可用的
💻
字号:
#include<stdio.h>
#include<string.h>
#include<memory.h>
#define MAX  100000
void reverse(char *p)
{//逆序存放
int i=(int)strlen(p),j;
char temp;
for(j=0;j<i/2;j++)
{
temp=p[j];
p[j]=p[i-j-1];
p[i-j-1]=temp;
}
}

int compare(char *a,char *b)
{//比较两正数大小
	if(strlen(a)>strlen(b))return 1;
	if(strlen(a)<strlen(b)) return -1;
	if(strcmp(a,b)>0)return 1;
	if(strcmp(a,b)<0)return -1;
	return 0;
}

void cutzero(char *temp)
{//去首零
	int i=0;
	int flag=0;
	if(temp[0]=='+'||temp[0]=='-')
	{
		i++;
		flag=1;
	}
	while(temp[i]=='0')
		i++;
	int j=0;
	if(flag) 
	temp[j++]=temp[0]; 
	int len=(int)
	strlen(temp);
for(;i<=len;i++,j++)
{
	temp[j]=temp[i];
}
    if(temp[0]=='\0')
{
	temp[0]='0';
	temp[1]='\0';
}
}

void add(char *c,char *a,char *b)
{//a加b结果放入c中  a,b都为正数
    char A[MAX],B[MAX]; 
 if(strlen(a)<strlen(b))
{
strcpy(A,b);    strcpy(B,a);
}
else
{
strcpy(A,a);    strcpy(B,b);
}
	reverse(A);
	reverse(B);
	int carry=0;//进位
	int i=0,temp;
	int flag=1;
	while(A[i])
	{
		if(flag) temp=A[i]+B[i]-96;
			else     temp=A[i]-48;
	c[i]=(temp+carry)%10+'0';
	carry=(temp+carry)/10;
	i++;
	if(flag&&!B[i]) flag=0;
	}
	if(carry==0)
    	c[i]='\0';
	else
	{
		c[i]=carry+'0';
		c[i+1]='\0';
	}
	reverse(c);
}

void mul(char *c,char *a,char *b)
{//a乘b结果放入c中  a,b都为正数
    char A[MAX],B[MAX];
    if(a[0]=='0'||b[0]=='0')
    {
        c[0]='0'; c[1]='\0';  return;
}
    memset(c,'0',MAX);
	strcpy(A,a);
	strcpy(B,b);
	reverse(A);
	reverse(B);
	int carry;//进位
	int i=0,j,temp1,temp2;
while(B[i])
{
	j=0;
	carry=0;
while(A[j])
{
	temp1=(A[j]-48)*(B[i]-48);
            temp2=c[i+j]-'0';
	c[i+j]=(temp1+temp2+carry)%10+'0';
	carry=(temp1+temp2+carry)/10;
	j++;
}
	if(carry!=0)   
	 c[i+j]=carry+'0';
	 i++;
}
if(c[i+j-1]=='0')
	c[i+j-1]='\0';
else
	c[i+j]='\0';
	reverse(c);
}

void sub(char *c,char *a,char *b)
{//a减b结果放入c中  a,b都为正数  
    char A[MAX],B[MAX];
  int flag=1;
	if(compare(a,b)<0) flag=0;
		if(flag==0)
	{
		strcpy(A,b);strcpy(B,a);
	}
	else
	{
	strcpy(A,a);strcpy(B,b);
	}
	reverse(A);
    reverse(B);
	int carry=0;//借位
	int i=0,temp;
	int mark=1;
	while(A[i])
	{
		if(mark)
			temp=A[i]-B[i]-carry;
		else   
		   temp=A[i]-carry-48; 
	if(temp<0)
	{
		carry=1;temp+=10;
	}
	else
		carry=0;
		c[i++]=temp%10+'0';
	if(mark&&!B[i]) 
		mark=0;
	}
		if(c[i-1]=='0')
	{
	if(flag==0)
	{
		c[i-1]='-';  
		c[i]='\0';
	}
	else
		c[i-1]='\0';
	}
	else
	{
	if(flag==0)
	{
	c[i]='-';c[i+1]='\0';
	}
	else
		c[i]='\0';
	}
		reverse(c);
		cutzero(c);
}

void div(char *d,char *m,char *a,char *b)
{// a/b 商d 余数m
//调用add sub mul
    if(compare(a,b)<0)
{
	d[0]='0';d[1]='\0';
	strcpy(m,a); 
	return;
}
	char A[MAX],B[MAX];
	strcpy(A,a); strcpy(B,b);
	char temp[MAX+1],havetry[MAX],tryd[2];
	memset(temp,'\0',MAX+1);
	int ina=strlen(B),ind=0,i,flag;
	int len_A=(int)strlen(A);
	strncpy(temp,A,ina);
while(ina<len_A+1)
{    
flag=0;
while(compare(temp,B)<0)
{    
if(ina==len_A)
{
	flag=1;
	d[ind++]='0';
	break;
}
	i=(int)strlen(temp);
	temp[i++]=A[ina++];
	temp[i]='\0';
	cutzero(temp);
	d[ind++]='0';
}
	if(flag==1)
		break; 
	if(strlen(temp)==strlen(B)) 
		i=(temp[0]-'0')/(B[0]-'0'+1);
  else     
	  i=((temp[0]-'0')*10+temp[1]-'0')/(B[0]-'0'+1);
  if(i<=1) i=2;
      while(1)
{
	tryd[0]=i+'0';
	tryd[1]='\0';
	mul(havetry,B,tryd);
	if(compare(havetry,temp)>0) break;
	i++;
}
	i--;
	d[ind++]=i+'0';
	add(temp,temp,B);
	sub(temp,temp,havetry);
	i=strlen(temp);
	temp[i++]=A[ina++];
	temp[i]='\0';
	cutzero(temp);
}
	cutzero(temp);
	strcpy(m,temp);
if(m[0]=='\0')
{
	m[0]='0';m[1]='\0';
}
	d[ind]='\0';
	cutzero(d);
}

void transfer(char result[MAX],int n)
{//整数n->字符串reuslt
	if(n==0) 
	{
		result[0]='0';
		result[1]='\0';
		return;
	}
		int i=0,temp=n;
	while(temp>0)
	{
		result[i++]=temp%10+'0';
		temp=temp/10;
	}
		result[i--]='\0';
		int length=(i+1)/2;
		int j;
	for(j=0;j<length;j++,i--)
	{
		temp=result[i];
		result[i]=result[j];
		result[j]=temp;
	}
}
int re_transfer(char result[MAX])
{//字符串result->整数n
	int count=0;
	int i;
	for(i=0;result[i];i++)
	count=count*10+result[i]-'0';
	return count;
}

void JieC(char result[MAX],int m)
{//计算m! ->result
	strcpy(result,"1");
	int i=2;
	char temp1[MAX],temp2[MAX];
	while(i<=m)
	{
		transfer(temp1,i);
		mul(temp2,result,temp1);
		strcpy(result,temp2);
		i++;
	}
}

void Cmn(char result[MAX],int m,int n)
{//计算C(m,n) (m>=n)
    if(n>m/2) n=m-n;
	strcpy(result,"1");
	int i,j;
	char temp1[MAX],temp2[MAX],temp3[MAX];
 for(i=m,j=1;i>=m-n+1;i--,j++)
    {
	transfer(temp1,i);
	mul(temp2,result,temp1);
	transfer(temp1,j);
	div(result,temp3,temp2,temp1);
	}
}
char result1[MAX],result2[MAX],result3[MAX];
char result4[MAX],result[MAX];
char r[MAX];
char a[MAX],b[MAX];
int main()
{   
   int a,b;

    return 1;    
}    


⌨️ 快捷键说明

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