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

📄 gaojingdu.cpp

📁 高精度的加和减法!
💻 CPP
字号:
//高精度加减法
#include <stdio.h>
#include <string.h>
#define WEISHU 100

struct Number
{
  int n[WEISHU];//假设最多有WEISHU位
  int ws;//记录位数
  int flag;//记录正负
};


//**********Add函数说明
//*****首先把两个加数分解成每4位一个数,如10000->1和0
//两个加数都必须是正整数,用flag标志。
//必须预先用ws记录加数的位数,flag记录加数的符号
//如果两个数异号,请用减法

Number Add( Number a, Number b )
{
   Number c;
   Number *ln,*sn;
   memset( c.n,0, sizeof(c.n) );
   ln = ( a.ws >= b.ws ) ? &a : &b;
   sn = ( a.ws < b.ws ) ? &a : &b;
   int i;
   for( i = 0; i < sn->ws; i++ )
   {
	   c.n[i] = ln->n[i] + sn->n[i];
	   if( c.n[i] >= 10000 )//一个结点存放五位
	   {
		   c.n[i] -= 10000;
		   c.n[i+1]++;
	   }
   }
   for( i = sn->ws; i < ln->ws; i++ )
   {
	   c.n[i] += ln->n[i];
   }
   if( c.n[ln->ws] > 0 )
	   c.ws = ln->ws+1;
   else
	   c.ws = ln->ws;
   c.flag = ln->flag;
   return c;
}

//**********Add函数说明
//*****首先把两个加数分解成每4位一个数,如10000->1和0
//两个加数都必须是正整数,用flag标志。
//必须预先用ws记录加数的位数,flag记录加数的符号
//如果两个数同号,请用加法

Number Sub( Number a, Number b )
{
   Number c;
   Number *ln,*sn;
   memset( c.n,0, sizeof(c.n) );
   ln = ( a.ws > b.ws ) ? &a : &b;
   sn = ( a.ws < b.ws ) ? &a : &b;
   int i;
   if( a.ws == b.ws )
   {
	   for( i = a.ws - 1; i >= 0; i-- )
	   {
		   if( a.n[i] > b.n[i] )
		   {
			   ln = &a;
			   sn = &b;
			   break;
		   }
		   if( a.n[i] < b.n[i] )
		   {
			   ln =&b;
			   sn = &a;
			   break;
		   }
	   }
	   
   }
   for( i = 0; i < sn->ws; i++ )
   {
	   c.n[i] = ln->n[i] - sn->n[i];
	   if( c.n[i] < 0 )
	   {
		   c.n[i] += 10000;
		   c.n[i+1]--;
	   }
   }
   for( i = sn->ws; i < ln->ws; i++ )
   {
		c.n[i] += ln->n[i];
		if( c.n[i] < 0 )
	   {
		   c.n[i] += 10000;
		   c.n[i+1]--;
	   }
   }
   c.ws = ( c.n[ln->ws-1] > 0 ) ? ln->ws : ln->ws-1;
	c.flag = ln->flag;
	return c;
}

int main()
{
	int a1 = 10000000;
	int b1 = 10001000;
	Number a, b;
	a.flag = ( a1 >=0 ) ? 1 : 0; 
	b.flag = ( b1 >=0 ) ? 1 : 0; 
	for( a.ws = 0; a1 > 0; a.ws++)
	{
		a.n[a.ws] = a1 % 10000;
		a1 /= 10000;
	}
	for( b.ws = 0; b1 > 0; b.ws++)
	{
		b.n[b.ws] = b1 % 10000;
		b1 /= 10000;
	}
	Number c1,c2;
	c1 = Add(a,b);
	c2 = Sub(a,b);
	return 0;
}

⌨️ 快捷键说明

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