n个大数加法(高精度)


#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int dx(char a[])
{
    int tmp,len;
    len=strlen(a);
    for(int i=0;i<len/2;i++)
    {
        tmp=a[i];
        a[i]=a[len-1-i];
        a[len-1-i]=tmp;
    }
}
int add(char a[],char b[],char c[])
{
    int i,d,e,len1,len2;
    len1=strlen(a);
    len2=strlen(b);
    dx(a);
    dx(b);
    e=0;
    for(i=0;i<len1&&i<len2;i++)
    {
        d=a[i]-'0'+b[i]-'0'+e;
        c[i]=d%10+'0';
        e=d/10;
    }
    if(i<len1)
    {
        for(;i<len1;i++)
        {
            d=a[i]-'0'+e;
            c[i]=d%10+'0';
            e=d/10;
        }
    }
    else
    {
        for(;i<len2;i++)
        {
            d=b[i]-'0'+e;
            c[i]=d%10+'0';
            e=d/10;
        }
    }
    if(e)
    c[i++]=e+'0';
    c[i]=0;
    int t=i;
    dx(c);
}
int main()
{
    int m,n;
    while(cin>>m)
    {
        char a[110],b[110],c[110],d[110],f[110];
        if(m==1)
        cout<<m<<endl;
        else
        {
            cin>>a>>b;
            add(a,b,c);
            for(int i=3;i<=m;i++)
            {
               cin>>d;
               add(c,d,f);
               strcpy(c,f);
            }
            cout<<c<<endl;
        }
    }
    return 0;
}

时间: 2024-09-06 11:22:58

n个大数加法(高精度)的相关文章

大数加法和乘法

#include<iostream> #include<cstdio> #include<cstring> const int Len=5000//大数的长度 using namespace std; int Input (char n[])//将大数读入的函数 { char s[Len]; int l; for(int i=0; i<Len; i++) n[i]=0; if(scanf("%s",s)<1) return -1; l=

c++加法高精度算法的简单实现_C 语言

c++高精度算法,对于新手来说还是一大挑战,只要克服它,你就开启了编程的新篇章,算法. 我发的这个代码并不是很好,占用内存很多而且运行时间很长(不超过1秒),但是很好理解,很适合新手 高精算法的本质就是把数组编程字符串,然后将字符串像竖式一样加起来: a+b高精度算法 #include <iostream> #include <cmath> #include <cstring> using namespace std; int main() { char a[10001

大数加法

语法:add(char a[],char b[],char s[]); 参数: a[]: 被乘数,用字符串表示,位数不限 b[]: 乘数,用字符串表示,位数不限 t[]: 结果,用字符串表示 返回值: null 注意:     空间复杂度为 o(n^2)   需要 string.h 源程序:     #include <iostream> #include <string.h> using namespace std; void add(char a[],char b[],char

深入理解大数与高精度数的处理问题_C 语言

float和double型数据分别是单精度和双精度型数,他们的取值分别是3.4E+10的负38次方到3.4E+10的38次方,和1.7E+10的负308次方到1.7E+10的308次方. 那么对于float而言,只有6-7位的有效数字,怎么能装下可达3.4*10^(-38)这么大的数呢?同理,15-16位的double型,也无法装下1.7*10^(-308)这么大的数啊? 回答: float 6-7位指的是有效数字的位数(精度),而不是数值大小.例如,3.14159267有9位有效数字,数值却在

[算法系列之八]大数问题(高精度运算)

[大数相加] [代码一] /********************************* * 日期:2015-01-28 * 作者:SJF0115 * 题目: 大数加法(高精度加法) * 博客: **********************************/ #include <iostream> using namespace std; string AddString(string num1,string num2){ int len1 = num1.length(); in

Java工作利器之常用工具类(二)——数字工具类-大数乘法、加法、减法运算

上篇分享了一下数字转汉字的小功能,这里再分享一下大数相乘.相加.相减的功能.其他的不做过多的铺垫了,我先讲一下各个功能的计算原理. Ⅰ. 乘法运算 为什么先说乘法运算--因为我先做了乘法运算.其实思路也是很多的,但是最终我参考了网络上的一种计算方案,然后做了很多的修改.感觉这个在思路上应该是比较简单的. 简单点说:把数拆分成整数小数分别进行乘法运算,然后将结果放入一个特定长度的数组中,在放入是要计算存放的偏移位置,最后再对这个进行处理(进位.标记等),得到最终的结果. 是不是有点晕.请我详细说一

使用C++的string实现高精度加法运算的实例代码_C 语言

对于超大数字的运算,用long long int仍然不能解决,这时候就需要考虑通过模拟运算和数组存储来实现高精度运算. 本文讨论借助C++的string来实现高精度的运算. 首先输入的量直接存储为string,设为s1和s2. 接下来设计一个反转函数,用于把整个字符串反转(为了方便后续计算). string reverseStr(string input){ string output = ""; for(int i = 0; i < input.length(); i++){

poj 1503 Integer Inquiry【高精度】

这题总算是没有那么水的感觉了,不过还是水题,哈哈哈...题目主要是求高精度----大数的和,我专门写了一个add函数处理,sum和VeryLongIntegers是两个全局的变量,开始我还准备把sum也写成char型的字符串,但是考虑到结尾的'\0',那不是自找麻烦..果断换成int型数组,这样就容易处理多了. 在add函数中,我把VeryLongIntegers又反转了一次(即变成低位在前),也换成一个int型的数组,这样就变成两个int型数组的高精度加法了... 开始还觉得可能会WA一次,不

C#的加法运算

加法操作符可以用运用于整数类型.实数类型.枚举类型.字符串类型和代表类型.这是通过操作符重载实现的,我们将在第十一章讲述操作符重载的内容,这里我们只需要知道这些操作符可以对不同类型的变量进行运算就可以了.加法操作符实际上定义了以下原型用于整数和浮点数运算: int operator +(int x,int y); uint operator +(uint x,uint y); long operater +(long x,long y); ulong operator +(ulong x,ulo