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

📄 lint.cpp

📁 这个是大数的加法运算的程序
💻 CPP
字号:
#include<stdio.h>

struct lint						//结构体变量
{
	unsigned short num[4];		//unsigned short 2字节/16位;num[4]用于存放64位大整数
	void inlint();				//输入
	void addlint(lint src);		//加法
	void outlint();				//输出
};

void lint::inlint()				//输入
{
	char s[30],i,j;				//s:输入字符串;i,j分别为循环变量
	unsigned l;					//unsigned int 4字节/32位
	for(i=0;i<4;i++)			//数组num初始化为0
		num[i]=0;
	scanf("%s",s);				//输入一个大整数
	for(i=0;s[i];i++)			//以下循环把10进制大整数转换为65536(=2^16)进制,分两步来做(以115为例,现已有11)
	{
		for(j=0,l=0;j<4;j++)	//第一步:11*10=110
		{
			l=num[j]*10+(l>>16);//l>>16相当于l整除65536取得的商
			num[j]=l;			//数组num每一位=其本身乘以10并加上其低一位的进位值
		}
		for(j=0,l=(s[i]-48)<<16;j<4;j++)//第二步:110+5=115
		{//字符0的ASCII码值为48,s[i]-48实现字符到数字的转换
			l=num[j]+(l>>16);	//数组加上s[i]-48,依次判断是否需要进位,若需要则进位。
			num[j]=l;
		}
	}    
}

void lint::addlint(lint src)
{
	unsigned l,j;
	for(j=0,l=0;j<4;j++)
	{
		l=num[j]+src.num[j]+(l>>16);	//各位相加并加上低一位的进位。
        num[j]=l;
	}
}

void lint::outlint()
{
	unsigned short t[4];	//unsigned short   2字节
	short i,j;				//short int 2字节
	unsigned r[6];		//unsigned int 4字节,数组r的每一位存放10进制数的4位
	for(j=0;j<4;j++)		
		t[j]=num[j];
	for(i=0;i<=5;i++)		//计算数组r(详细情况见下)
		for(j=3,r[i]=0;j>=0;j--)
		{
			r[i]=(r[i]<<16)+t[j];   //t[0]是高位,t[3]是低位; <<相当于*65536
			t[j]=r[i]/10000;
			r[i]=r[i]%10000;
		}
	for(i=5;!r[i]&&i>=0;i--);//寻找不为零的r[i]
	if(i<0)
		printf("0");
	for(;i>=0;i--)			//输出10进制数
		printf("%4.4d",r[i]);
	printf("\n");
}

void main()
{
	lint s1,s2,res;
	s1.inlint();
	s2.inlint();
	res=s1;
	res.addlint(s2);
	res.outlint();
}

/*

假设ABCD转换为10进制数后为algorism
num:	ABCD,即num[0]=A,...,num[3]=D,存放的是65536进制的数
		algorism=(((0*65536+A)*65536+B)*65536+C)*65536+D

分解ABCD:
	A		 =a*10000+b		其中b为A对algorism低4位的贡献。a*10000对低4位没有贡献。
	b*65536+B=m*10000+n		其中n为AB对algorism低4位的贡献。
	n*65536+C=p*10000+q		其中q为ABC对algorism低4位的贡献。
	q*65536+D=r*10000+s		其中s为ABCD对algorism低4位的贡献。

数组t:ampr,即t[0]=a,...,t[3]=r
*/
		

⌨️ 快捷键说明

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