📄 gaojingdu.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 + -