大整数相加算法

原创 2006年05月24日 01:44:00

#include <stdio.h>
#include <string.h>
#include <conio.h>

#define Max 1000

char res[Max+1];          // 和
char a[Max],b[Max];       // 两个加数!
int len1,len2;

void Init(char *a)
{
 int i;
 for(i=0; i<Max; i++)
 {
  a[i] = '0';
 }
 return ;
}

/*************************************************************
* Function: 大整数相加
* description: 两个大整数作加法运算,从后面往前面相加,附带进位.
            为了满足任意位数的两个大整数相加,一开始把存放结果的
   数初始化为'0',再在后面加上其中的一个加数.
* input  : res--既是一个加数,又是存放相加结果.
           newont-- 其中的一个加数
* output : 相加的结果。
* backworth : No Baceworth@!
**************************************************************/
void Long_Add(char *res,char *newone)  // res数组里的数既是加数又是加出来的和.
{
 int i,j;
 int len;
 int tempsum;
 int carry = 0;                // 进位

 len = strlen(newone);
 for(i=Max-1,j=len-1; i>=0,j>=0; i--,j--)
 {
  tempsum = res[i]-'0'+newone[j]-'0'+carry;
  res[i] = tempsum%10+'0';
  carry = tempsum/10;
 }
 while(carry > 0)  // ------注意处理最后一个进位!
 {
  tempsum = res[i]-'0'+carry ;
  res[i] = tempsum%10+'0';
  carry = tempsum/10;
  i--;
 }
 //------------------- 很绚的输出运算结果。
 for(i=0;i<Max;i++)
  if(res[i] != '0')
   break;
 
 int n=i;
 len = Max - i;
 for(i=0;i<10;i++)
  putchar(' ');
 puts(a);
 for(i=0;i<3;i++)
  putchar(' ');

 putchar('+');
 for(i=0;i<6+len1-len2;i++)
  putchar(' ');
 puts(b);

 for(i=0;i<3;i++)
  putchar(' ');
 for(i=0;i<len+7;i++)
  putchar('-');
 printf("/n");

 for(i=0;i<10+len1-len;i++)
  putchar(' ');
 for(n;n<Max;n++)
  putchar(res[n]);
 //--------------------------以上是为了绚烂输出结果的   !

/* for(i;i<Max;i++)
  putchar(res[i]);
 printf("/n");
 */
 return ;
}

void Input(char *a,char *b)
{
 int i,len;

 printf("请输入两个大整数:/n");
 scanf("%s %s",a,b);

 len1=strlen(a);
 len2=strlen(b);

 Init(res);
 len=strlen(a);
 for(i=len-1; i>=0; i--)
  res[Max+i-len] = a[i];
}

int main()
{

 Input(a,b);

 Long_Add(res,b);

 getch();
 return 0;
}
/**************************88运算结果:
请输入两个大整数:
25639874569 5124562132215
          25639874569
   +  5124562132215
      --------------------
        5150202006784

请输入两个大整数:
1999999 3
          1999999
   +               3
      --------------
          2000002
******************************************/

两个超大数相加算法

#include #include #include /********************************************************************...
  • woaifen3344
  • woaifen3344
  • 2013年05月29日 11:30
  • 2827

大整数加法计算思路与算法实现

大整数加法
  • lnnnd
  • lnnnd
  • 2016年06月12日 10:17
  • 3303

关于大整数相加与相减

大整数相加核心: void bigadd_methods(char *a, char *b, char *c) { //确保数组a长于数组b int A = strlen(a), B = s...
  • DIDCJS
  • DIDCJS
  • 2016年05月25日 22:28
  • 765

Java实现大整数相加

static int N=100; static int a[]=new int[N]; static int b[]=new int[N]; static int c[]=new int...
  • yeruby
  • yeruby
  • 2013年09月25日 20:25
  • 5326

hdu002大数相加

大数相加
  • s_naughty
  • s_naughty
  • 2016年07月19日 11:35
  • 81

c++实现两个大整数相加(一)

巨大的整数,比如100位、200位的整数无法用已有的整数类型来表示,那么,怎么求两个大整数的和? 可以采用最原始的方法:逐为相加的方法。因此,我们可以把两个大整数作为两个字符串,字符串从后往前将对应位...
  • weitxing
  • weitxing
  • 2015年09月12日 14:02
  • 6078

C++大整数相加

C++大整数相加算法,采用数组保存大整数,然后进行大整数的相加。#include #include char *LongAdd(char *b, char *c); int main() { ...
  • qq_29606255
  • qq_29606255
  • 2017年12月15日 19:40
  • 43

PHP坑之:大整数相加

网上的大整数相加算法(PHP)大多实现的都有这样或者那样的问题,要么没有考虑最高位进位,要么没有考虑各位相加的10进制溢出,大概PHPer都比较粗旷吧。 下面是自己仿照原来C语言版本(谭浩强版算法)...
  • hxmcnu
  • hxmcnu
  • 2017年07月05日 01:08
  • 417

【JS】大整数相加,相乘

首先,对于大整数,是指超过规定类型的整数,它一般的存储类型为字符串类型char。所以大整数的加、乘,实际上就是模拟手工运算。做每一位的运算。 在JS中,需要将字符串中的每一位字符利用parseInt...
  • mine666
  • mine666
  • 2013年04月23日 16:31
  • 1606

大整数相加,

对于大整数相加,相乘这一类,在c语言中没有哪一种基本类型可以存储大整数,所以一般的会采用数据结构,线性表,或者链表,虽然可以处理了,但是总感觉很麻烦,要考虑进位之类的。 但是在java中有一个Big...
  • wxylala
  • wxylala
  • 2016年08月05日 12:52
  • 143
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:大整数相加算法
举报原因:
原因补充:

(最多只允许输入30个字)