精华内容
下载资源
问答
  • 大数 加法 c语言

    万次阅读 多人点赞 2016-07-20 19:02:23
    最近遇到一个关于大数的问题顿时感觉好方,决定系统学一下大数。 注意:关于大数问题,由于数组不好界定输入数的大小(数组的长度),因此主要思想就是先用字符串输入保存在字符串数组中,再逆序存入整形数组进行...

    最近遇到一个关于大数的问题顿时感觉好方,决定系统学一下大数。

    注意:关于大数问题,由于数组不好界定输入数的大小(数组的长度),因此主要思想就是先用字符串输入保存在字符串数组中,再逆序存入整形数组进行最后逐位运算。

    刚开始通过博客http://www.cnblogs.com/Stone-sqrt3/archive/2013/04/25/3042338.html写的代码:

    思路:输入采用字符数组保存,然后将输入存在整形数组里,然后逐位相加即可,同时注意进位处理。

    //大数加法1
    #include<stdio.h>
    #include<string.h>
    #define M 10000
    #define kk -48// 0字符的ASC II值是48
     /*取lengA和lengB大的那个 */
    int maxl(int a,int b)
    {
        return a>b?a:b;
    }
     /*化字符为数字 */
    int zz(char c)
    {
        return c-'0';
    }
    int main()
    {
        char a[M],b[M];
        int A,B,Maxl,c,hh,sum[M],i,an,bn;
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        while(~scanf("%s%s",&a,&b))
        {
            A=strlen(a);
            B=strlen(b);
            printf("A=%d B=%d\n",A,B);
     /*把A和B字符串的顺序逆序排列 */
            for(i=0;i<(A+1)/2;i++)
            {
                if(i==A-1-i) break;// 排除共奇数位个大数的影响
                a[i]+=a[A-1-i];
                a[A-1-i]=a[i]-a[A-1-i];
                a[i]-=a[A-1-i];
            }
            for(i=0;i<(B+1)/2;i++)
            {
                if(i==B-1-i) break;// 排除共奇数位个大数的影响
                b[i]+=b[B-1-i];
                b[B-1-i]=b[i]-b[B-1-i];
                b[i]-=b[B-1-i];
            }
            /*加运算 */
            Maxl=maxl(A,B);
            for(i=0,c=0;i<=Maxl;i++)
            {
                an=zz(a[i]);
                bn=zz(b[i]);
                if(an==kk) an=0;// 排除初始化中0字符的影响;
                if(bn==kk) bn=0;// 排除初始化中0字符的影响;
                hh=an+bn+c;
                sum[i]=hh%10;
                c=hh/10;
            }
           /*最后一位若大于0就先输出*/
            if(sum[Maxl]>0) printf("%d",sum[Maxl]);
          /*逆序打印sum[] */
            for(i=Maxl-1;i>=0;i--)
            {
                printf("%d",sum[i]);
            }
            printf("\n");
        }
        return 0;
    }


    虽然代码运行符合要求,但感觉比较麻烦,因此又写了下面这个代码:

    //大数加法2
    #include<stdio.h>
    #include<string.h>
    #define M 100005
    char s1[M],s2[M];
    int a[M],b[M],c[M];
    int main()
    {
        int i,j,k,n,m;
        while(scanf("%s%s",s1,s2))
        {
            memset(c,0,sizeof(c));
            n=strlen(s1);
            m=strlen(s2);
            printf("s1的长度= %d s2的长度= %d\n",n,m);
     /* 把字符串s1和s2逆序用数字排列*/
            for(i=0; i<n; i++)
                a[i]=s1[n-i-1]-'0';
            for(i=0; i<m; i++)
                b[i]=s2[m-i-1]-'0';
            /*加运算*/
            if(n>m) k=n;
            else k=m;
            for(i=0; i<=k; i++)
            {
                c[i]+=a[i]+b[i];
                if(c[i]>9)
                {
                    c[i+1]++;
                    c[i]%=10;
                }
            }
            /*去除前导0*/
            i=k;
            while(c[i]==0) i--;
      /*判断两个非负数之和是否为0,以及逆序打印c[]*/
            if(i<0) printf("0");
            else
            {
                for(; i>=0; i--)
                    printf("%d",c[i]);
            }
            printf("\n");
        }
        return 0;
    }



    展开全文
  • 高精度处理大数加法C语言实现

    千次阅读 2018-03-12 19:19:29
    大数加法 前言(本人学习算法和c语言不久,只是发一点自己学习的结果,仅供参考) 大数加法应该算是高精度题目里最简单的题目了,所以本菜鸡也敢发一点自己的心得了,代码应该能确定是正确的(我测试了几个比较...

                                             大数加法

         前言(本人学习算法和c语言不久,只是发一点自己学习的结果,仅供参考
        大数加法应该算是高精度题目里最简单的题目了,所以本菜鸡也敢发一点自己的心得了,代码应该能确定是正确的(我测试了几个比较大型的OJ)

          大数加法的思路就是用数组来存储要来相加的两组大型数值型数据,首先是定义两个字符型数组,将两组数据用字符串输入到数组中,再将两组数据从头到尾按位转换,并将之后的值置0,并使用一个整形数组按位将值加到数组中,并将其模10,加入到整型数组的下一位,加完后,从整型数组的末尾开始循环找到不为的第一位跳出循环,并从那位开始倒输。

       代码如下:

                                             

    #include <stdio.h>
    #include <string.h>
    int main()
    {
    	char a[1010],b[1010],g;
    	int c[1011],e,f,i,s,h;
    	scanf("%d",&s);
          for(h=s;h>0;h--)
    	{
    	memset(a,0,sizeof(c));
        scanf("%s%s",a,b);
        e=strlen(a);
        f=strlen(b);
    printf("Case %d:\n",s-h+1);
       printf("%s + %s =",a,b);
        for(i=e;i<1010;i++)
        a[i]='0';
        for(i=f;i<1010;i++)
        b[i]='0';
        for(i=0;i<e;i++)
        {
    	g=a[i];
        a[i]=a[e-1];
        a[e-1]=g;
        e--;
    }
        for(i=0;i<f;i++)
        {
    	g=b[i];
        b[i]=b[f-1];
        b[f-1]=g;
        f--;
    }
        for(i=0;i<=1010;i++)
        {
        	c[i]=c[i]+(a[i]-'0')+(b[i]-'0');
        	c[i+1]=c[i]/10;
        	c[i]%=10;
    	}
    	for(i=1000;i>=0;i--)
    	if(c[i]!=0)
    	break;
    	if(i<0)
    	printf("%d",c[0]);
    	for(e=i;e>=0;e--)
    	printf("%d",c[e]);
    	printf("\n");
    }
    	return 0;
    }

    展开全文
  • 大数加法C语言

    2018-03-25 16:52:46
    acm大数加法C语言实现,使用数组进行过程模拟,同时注意字符串中ASCII码的转换
  • 大数加法_C语言

    2019-10-05 04:28:27
    http://acm.hdu.edu.cn/showproblem.php?pid=1002 #include<stdio.h> #include<string.h> // 预处理数值,去除前导0 void prefix(char num[]) { if (num[0] != '0') //没有前导0,不用... ...

    http://acm.hdu.edu.cn/showproblem.php?pid=1002

    #include<stdio.h>
    #include<string.h>
    
    // 预处理数值,去除前导0
    void prefix(char num[])
    {
        if (num[0] != '0')  //没有前导0,不用处理
        {
            return;
        }
        char *p = num;
        for (; *p == '0' && *p != 0; p++);  //使p移位指向第一个不为0的数位上
        if (*p == 0)
        {
            num[0] = '0';
            num[1] = 0;
        }
        else
        {
            num[0] = *p;
            for (char *q = num; *p != 0; *(++q) = *(++p));
        }
    }
    
    int main(int argc,char *argv[])
    {
        int flag=0;
        char a[1001],b[1001];   //数字存储器
        int ans[1001]={0};      //和存储器
        int n=0;                //迭代次数
        
        //获取变量
        scanf("%d",&n);
        
        //迭代
        for(int p=1;p<=n;p++)
        {
            flag++;
            //读取两个数
            scanf("%s%s",a,b);
            
            //前导0的去除
            prefix(a);
            prefix(b);
            
            //获取两个字符串的长度
            int lena=strlen(a);
            int lenb=strlen(b);
            
            //使pa存储长度更大的字符串
            char *pa,*pb;
            if(lena<lenb)
            {
                lena+=lenb;
                lenb=lena-lenb;
                lena-=lenb;
                //交换lena与lenb的目的是使pa指向的数长度更长
                pa=b;
                pb=a;
            } 
            else
            {
                pa=a;
                pb=b;
            }
            
            //计算开始
            int upa=0;//进位器
            int r=0;//存储数据数组的枚举
            for(int i=lena,j=lenb;i>0;)
            {
                //获取两个数当前的位数
                int na=pa[--i]-'0';
                int nb=j>0 ? pb[--j]-'0' : 0;   //pb指向的数位更短,以此计算时可能位数不够则为0
                
                //得到当前位的和
                int sum=na+nb+upa;
                
                //获得进位,比如9+8=17>10,则视为相应位为7,前一位进1
                upa=sum/10;
                
                //存储当前位
                ans[r++]=sum%10; 
            }
            
            //检测最后一位是否存在进位
            if(upa>0)
            {
                 ans[r++]=upa;
            }
            
            //输出Case #:
            printf("Case %d:\n",flag);
            
            //输出a + b =
             printf("%s + %s = ",a,b);
             
             //输出结果
             while(r>0)
            {
                
                printf("%d",ans[--r]);
            } 
            
            //换行
            if(p!=n)
            {
                printf("\n\n");
            }
            else
            {
                 printf("\n");
            }
        } 
        return 0;
    }

     

    转载于:https://www.cnblogs.com/friend-A/p/8933645.html

    展开全文
  • 大数加法

    2016-06-30 20:40:42
    大数加法 C语言


    #define   _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include<stdlib.h>
    #include<string.h>
    //C语言声明变量需要加上stuct
    //C语言结构内部不可以有函数
    //C语言结构体没有公有,私有,继承






    /// 加法,减法
    /// 1234.567 ×12345.987
    /// 15K+  除法,


    //————————


    void getbigdata(char *dataa, char* datab)
    {
    int lengtha = strlen(dataa);
    int lengthb = strlen(datab);


    if (lengtha < lengthb)
    {
    char* temp = NULL;
    temp = dataa;
    dataa = datab;
    datab = temp;


    int tem = lengtha;
    lengtha = lengthb;
    lengthb = tem;


    }






    int *pres = (int *)malloc(sizeof(int)*(lengtha + lengthb));






    memset(pres, 0, sizeof(int)*(lengtha + lengthb));//初始化
    //累乘














    for (int i = lengtha ,j=lengthb,k=1; i >= 0||j>=0; i--,j--,k++)
    {
    //for (int j = 0; j < lengthb; j++)
    {
    pres[lengtha + lengthb-k] = (dataa[i] - '0') + (datab[j] - '0');
    }
    if (j==0)
    {
    for (--i; i >= 0; i--,k++)
    {
    pres[lengtha + lengthb - k-1] = (dataa[i] - '0');
    }
    }






    }








    //进位
    for (int i = lengtha + lengthb - 1; i >= 0; i--)
    {
    if (pres[i] >= 10)//进位
    {
    pres[i - 1] += pres[i] / 10;//进位
    pres[i] %= 10;//取出个位数
    }


    }




















    int i = 0;
    while (pres[i] == 0)
    {
    i++;//恰好不为0的位置
    }








    char *lastres = malloc(sizeof(char)*(lengtha + lengthb));
    int j;






    for (j = 0; j < lengtha+1; j++, i++)
    {
    lastres[j] = pres[i] + '0';
    }
         lastres[j] = '\0';
    printf("last结果=%s", lastres);








    }










    void main()
    {
    char str1[100] = { 0 };
    char str2[100] = { 0 };
    scanf("%s%s", str1, str2);
    printf("str1=%s,str2=%s", str1, str2);//打印结果
    getbigdata(str1, str2);


    //strcpy(str1, "123123");


    system("pause");




    }
    展开全文
  • 大数加法(C语言)

    2015-11-24 21:08:51
    大一遗留问题,心血来潮。 #include #include int main() { char add1[100], add2[100], result[101]; int len1, len2, minLen, maxLen; int count1 = 0, count2 = 0; scanf("%s", add1);... len1 = s
  • 大数相加 51nod1005传送门 基本思路是: 1、两个字符串把大数读进来 然后把每一位字符换成数字存到 x y 数组里面 2、拿 x y 数组从后往前 对应位相加 (注意进位) 相加的结果依次存到 c数组里 3、然后对c...
  • C语言-大数加法

    2018-04-16 12:07:53
    C语言 实现大数加法,在加法运算的时候假如有两个10000位数的两个数进行相加,那么用int long double型都装不下这么多位数,所以采用char数组来实现加法运算,解决精度的问题
  • 给出2个大整数A,B,计算A+B的结果。 Input 第1行:大数A 第2行:大数B (A,B的长度  Output 输出A + B Input示例 68932147586 468711654886 Output示例 537643802472 ...C语言AC代码
  • HDU 1002 大数加法C语言

    千次阅读 2017-01-21 22:53:31
    while(i>=0 && j>=0) //做加法运算 ,直到一个字符串被算完。 { if(ans[p]+(a[i]-'0')+(b[j]-'0')>9) //大于9,进位。 { ans[p]=(ans[p]+(a[i]-'0')+(b[j]-'0'))%10; ans[p+1]++; } else...
  • c语言大数加法

    2020-01-20 11:10:14
    在csdn上查大数加法,查到的大多数都是用字符数组做的,现在给大家介绍一种不用字符数组的方法,来计算一个大数+1. 源码如下 #include<stdio.h> int* plusOne(int* digits, int digitsSize, int* return...
  • C语言大数加法

    2018-02-11 19:45:35
    C语言实现大数加法,为了简单,开了两个字符串,两个数组,将字符串逆序存入数组,思路简单直接#include&lt;stdio.h&gt; #include&lt;string.h&gt; #define MAX 200 using namespace std; int a1...
  • C语言 加法 大数加法

    2016-02-05 15:06:48
    C语言写了一个加法,只支持正整数运算#include #include #define N 100int main() { char s1[N] = {0}; char s2[N] = {0}; char s[N+1] = {0}; puts("please enter the first number\n"); gets
  • 为什么C语言会有大数加法这个专门的概念? 难道大数不是直接相加就行了吗? 其实是因为C语言中定义的整数型都是有位数限制的。比如int型的取值范围为-2147483648~+2147483647,即使是long long int的取值范围也只是-...
  • C语言 大数加法

    2020-02-10 20:29:29
    属于遗留问题,现在已解决。 如有问题,恳请指正! #include<stdio.h> #include<string.h> char fir[1000000]={'\0'},sec[1000000]={'\0'},last[10000000]={'\0'};... int first=0,second=0,ju...
  • 大数运算c语言代码

    2013-11-01 20:08:42
    C语言无符号整形的大数加法和乘除法的源代码,自己编译通过,并且加有自己理解的注释!大数除法.cpp 大数乘法.cpp 大数加法.cpp
  •  大数加法,可以模拟小学的加法,主要是几步:由字符型转换成整形数组,反转相加,处理进位情况,再转换回字符型输出答案。废话不多说了,代码如下:     # include # include char * sum(char *a,char*b)/...
  • c语言实现大数加法

    千次阅读 2019-12-04 19:28:05
    c语言实现大数加法 实际上就是竖式计算用C语言表示出来: 对于10进制 相同数位对齐,若和大于9,则向前进1。 我们处理竖式计算的常规方式,就是十进制,对于一个大数A:“112233445566778899”,当位数很大时,...
  • C语言 · 大数加法

    2017-02-25 20:52:00
    算法提高 大数加法 时间限制:1.0s 内存限制:256.0MB 问题描述  输入两个正整数a,b,输出a+b的值。 输入格式  两行,第一行a,第二行b。a和b的长度均小于1000位。 输出格式  一行,a+b的值。 ...
  • 考点:大数加法。 Accepted的代码: #include<stdio.h> #include<string.h> #define MAX_LENGTH 1005 char a[MAX_LENGTH],b[MAX_LENGTH],s[MAX_LENGTH]; void str_reverse(char *str) { int len=...
  • C语言简单大数加法

    2020-04-02 23:20:02
    使用逢十进一思想计算大数相加
  • C语言链表实现大数加法

    千次阅读 2018-12-18 16:17:46
    C语言链表实现大数加法 #include &amp;amp;lt;stdio.h&amp;amp;gt; #include &amp;amp;lt;stdlib.h&amp;amp;gt; #include &amp;amp;lt;string.h&amp;amp;gt; typedef struct list { ...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 167
精华内容 66
关键字:

大数加法c语言

c语言 订阅