我的高精度算法

高精度加法。。。。


下面是数据结构版本的:

#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
 
#define MAX 10000
 
typedef struct{        //结构体  用来表示一个数  内容  长度
    int a[MAX];
    int length;
}BigNum;
 
void add(BigNum a, BigNum b){        //加法
    int len, i;
    len = a.length > b.length?a.length:b.length;
    int s, t = 0;
    for(i=0; i<len; i++){
        s = a.a[i] + b.a[i];
        t = s / 10;
        a.a[i] = s % 10;   
        a.a[i+1] = a.a[i+1] + t;         
    }
    if(a.a[len]) 
        len++;        
    for(i=len-1; i>=0; i--)
        printf("%d", a.a[i]);
 
}
 
void put_in(BigNum a, BigNum b){        //输入数据
    int ai, bi;
    char a1[MAX], b1[MAX];
    a.length = strlen(gets(a1));
    b.length = strlen(gets(b1));
     
    for(int i=0; i<a.length; i++){
        a.a[i] = a1[a.length-i-1] - '0';        //将字符型转换成整形 
    }
    printf("\n");
    for(int i=0; i<b.length; i++){
        b.a[i] = b1[b.length-i-1] - '0';    
    }
    printf("\n");
     
    add(a, b);
}
 
int main(){
    int i=0;
    BigNum a;        //定义两个对象
    BigNum b;
    for(i=0; i<MAX; i++){        //将每位都初始化为 0 避免有乱七八糟的数字
        a.a[i] = 0;
        b.a[i] = 0;
    }
    a.length = 0;            //初始化长度
    b.length = 0;
 
    put_in(a, b);            //输入数字
    return 0;
}


下面是数组版本的:

/*高精度加法(数组版)
#include <stdio.h>
#include<string.h>
int main()
{
    int i;
    char a[101],b[101],c[102]={0};
    scanf("%s%s",a,b);
    int  alen=strlen(a);
    int  blen=strlen(b);
 for (i = 0; i < alen || i < blen; i++)
    {
        if (i < alen)
            c[i] += a[alen-i-1] - '0';
        
        if (i < blen)
            c[i] += b[blen-i-1] - '0';
            
        if (c[i] >= 10)
        {
            c[i+1] = c[i] / 10; //存储进位数
            c[i] %= 10;   //存储末位数
        }
    }
    if (alen < blen) alen=blen;//确定c[]的长度
    if (c[alen] > 0) printf("%d", c[alen]);//打印首位数
  for (i = alen - 1; i >= 0; i--)
        printf("%d", c[i]);
    return 0;
}


    for(i=0; i<la; i++)
    {
        printf("%d", a[i]); 
    }
*/

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

#define N 1000

int main()
{
    int a[N] = {0}, b[N] = {0};
    char ch[N];
    int la, lb, len;
    int i;

//input a
//  printf("input a:");
    scanf("%s", &ch);
//    printf("%s\n", ch);
    la = strlen(ch);            //a length
//    printf("%d\n", la);
    for(i=0; i<la; i++)
    {
        a[i] = ch[la-1-i] - '0';
    }

//input b
//    printf("input b:");
    scanf("%s", ch);
    lb = strlen(ch);
//    printf("%d\n", lb);
    for(i=0; i<lb; i++)
    {
        b[i] = ch[lb-1-i] - '0';
    }
    
//  a + b  attention
    len = la>=lb?la:lb;
    int s=0, t=0;
    for(i=0; i<len; i++)
    {
        s = a[i] + b[i];//当前所得到的结果
        t = s / 10;//进位     应该用除法 
        a[i] = s % 10;    //应该取余数 
        a[i+1] = a[i+1] + t;
    } 
    
 //增加位数 
    if(a[len]) 
    {
        len++;
    }
    //打印 
    for(i=len-1; i>=0; i--)
    {
        printf("%d", a[i]); 
    } 
    
    
    
    return 0;
}


先把加法贴进去。。后面的留个坑以后再补咯。。。


你可能感兴趣的:(我的高精度算法)