C 数据结构之高精度整数

       当我们遇到一些数值非常巨大的整数以至于我们不能用任何一种数据类型来保存他的值,这个时候我们要考虑使用一个结构体来保存这个整数,并完成对其运算的实现。

1.实现一个加法器。使其能够输出a+b的值

输入包括两个数a和b,并且都不超过1000位,输出a+b的值
样例输入:
2 6
10000000000  1000000000000000 
样例输出:
8

1000010000000000 

思路:定义一个结构体来保存一个高精度整数

struct bigInteger
{
	int digit[1000]; 
	int size;
}
digit数组保存大整数中每若干位数字,这里使用每4位一组。size表示digit数组中第一个还没有使用的数组单元。以整数123456789为例,gigit[0]=6789,digit[1]=2345,digit[2]=1,size=3。用代码模拟加法的运算法则,按照从低到高相加并加上来自低位的进位的规则进行运算。
#include
#include
struct bigInteger//高精度整数结构体 
{
	int digit[1000];//按四位数一个单位保存数值 
	int size;
	void init() //对结构体的初始化 
	{
		for(int i=0;i<1000;i++) digit[i]=0; //所有数位清0 
		size=0;
	}
	void set(char str[])//从字符串中提取整数 
	{
		init();//对结构体初始化 
		int L=strlen(str);
		for(int i=L-1,j=0,t=0,c=1;i>=0;i--)
		{//从最后一个字符开始倒序遍历字符串,j控制每4个字符转化为一个数字
		//t 临时保存字符转化为数字的中间值,c表示当前位的权重,按1,10,100,1000顺序变化 
			t+=(str[i]-'0')*c;
			//计算这个四位数中当前字符代表的数字,即数字乘以权重 
			j++;//当前转换字符数增加 
			c*=10;//计算下一位权重 
			if(j==4 || i==0)
			{//若已经连续转换4个字符,或达到最后一个字符 
				digit[size++]=t;//将这四个字符代表数字存入数组,size移动到下一个数组单位 
				j=0;//重新开始计算下4个字符 
				t=0;//临时变量清0 
				c=1;//权重变为1 
			}
		}
	}
	void output()//将高精度整数输出 
	{
		for(int i=size-1;i>=0;i--)
		{
			if (i!=size-1) printf("%04d",digit[i]);
			//若当前输出不是最高位数字 输出前导0;当前数字不足4位由0补充,如输出110001的后四位数 
			else printf("%d",digit[i]);
		}
		printf("\n");
	}
	bigInteger operator +(const bigInteger &A) const//加法运算符 
	{
		bigInteger ret;//返回值,两数相加结果 
		ret.init();
		int carry=0;//进位,初始值为0 
		for(int i=0;i

你可能感兴趣的:(C语言编程)