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

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

    在csdn上查大数加法,查到的大多数都是用字符数组做的,现在给大家介绍一种不用字符数组的方法,来计算一个大数+1.
    源码如下

    #include<stdio.h>
    int* plusOne(int* digits, int digitsSize, int* returnSize) 
    {
     int i,j,t;
     printf("Please input the arraysize\n");
        scanf("%d",&digitsSize);
        for(i=0;i<digitsSize;i++)
        {
            printf("Please input the %d-th number\n",i);
            scanf("%d",&digits[i]);
        }
        for(i=0;i<digitsSize/2;i++)
        {
         t=digits[i];
         digits[i]=digits[digitsSize-1-i];
         digits[digitsSize-1-i]=t;
     }
     digits[0]++;
     for(i=0;i<digitsSize;i++)
     {
      if(digits[i]==10)
      {
       digits[i+1]++;
       digits[i]=0;
      }
     }
        printf("after plus one\n");
        for(i=0;i<digitsSize/2;i++)
        {
         t=digits[i];
         digits[i]=digits[digitsSize-1-i];
         digits[digitsSize-1-i]=t;
     }
     for(i=0;i<digitsSize;i++)
     {
      if(digits[0]==0)
      {
       digits[0]=10;
      }
      printf("%d",digits[i]);
     }
    }
    int main()
    {
     int a[100],b,c[100];
     plusOne(a,b,c);
     return 0;
    }

    希望能对大家有所帮助 (o_o)

    展开全文
  • 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语言实现大数加法,为了简单,开了两个字符串,两个数组,将字符串逆序存入数组,思路简单直接

    #include<stdio.h>
    #include<string.h>
    #define MAX 200
    using namespace std;
    int a1[MAX+1];
    int a2[MAX+1];
    char s1[MAX+1];
    char s2[MAX+1];
    int main()
    {
    	int la1,la2;
    	scanf("%s",s1);
    	scanf("%s",s2);
    	la1=strlen(s1);
    	la2=strlen(s2);
    	memset(a1,0,la1*sizeof(int));  //将a1数组全部归零
    	memset(a2,0,la2*sizeof(int));
    	for(int i=0;i<la1;i++)
    	a1[i]=s1[la1-i-1]-'0';   //将字符串在转化为数组,为了计算方便,使用倒叙
    	for(int i=0;i<la2;i++)
    	a2[i]=s2[la2-i-1]-'0';
    	for(int i=0;i<MAX;i++)   //注意这里把前面的0都相加,可以优化 
    	{
    		a2[i]+=a1[i];
    		if(a2[i]>=10)
    		{
    			a2[i]-=10;
    			a2[i+1]++;
    	     }
    	}
    	int flag=0;
    	for(int i=MAX;i>=0;i--)
    	{
    		if(flag)
    		printf("%d",a2[i]);
    		else if(a2[i]!=0)
    		{
    			flag=1;
    			printf("%d",a2[i]);
    		}
    	}
    	if(flag==0)
    	printf("0");
    }

    展开全文
  • 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...

    属于遗留问题,现在已解决。
    如有问题,恳请指正!

    #include<stdio.h>
    #include<string.h>
    char fir[1000000]={'\0'},sec[1000000]={'\0'},last[10000000]={'\0'};
    int main(){
    	int i,j,k;
    	i=j=k=0;
    	int first=0,second=0,judge=0,judge_=0;
    	printf("this is a program about plus.\n");
    	printf("first number:\n");
    	scanf("%s",fir);
    	printf("second number:\n");
    	scanf("%s",sec);
    	first=strlen(fir);
    	second=strlen(sec);
    	//printf("%d\n",first);
    	//printf("%d\n",second);
    	judge=judge_=0;
    	if(first>second){
    		for(i=second-1,j=first-1;i>=0;j--,i--){
    			judge=fir[j]-48+sec[i]-48;
    			if(judge>9&&judge_==0){
    				judge_=1;
    				judge=judge%10;
    				last[j]=judge+48;
    			}
    			else if(judge>9&&judge_==1){
    				judge=judge+1;
    				judge_=1;
    				judge=judge%10;
    				last[j]=judge+48;
    			}
    			else if(judge<=9&&judge_==1){
    				judge=judge+1;
    				if(judge>9){
    					judge_=1;
    					judge=judge%10;
    					last[j]=judge+48;
    				}
    				else{
    					last[j]=judge+48;
    					judge_=0;
    				}
    			}
    			else if(judge<=9&&judge_==0){
    				last[j]=judge+48;
    				judge_=0;
    			}
    		}
    		for(i=first-second-1;i>=0;i--){
    			if(judge_==0){
    				last[i]=fir[i];
    				judge_=0;
    			}
    			else if(judge_==1){
    				judge=fir[i]-48+1;
    				if(judge>9){
    					judge_=1;
    					judge=judge%10;
    					last[i]=judge+48;
    				}
    				else{
    					judge_=0;
    					last[i]=judge+48;
    				}
    			}
    		}
    		if(judge_==1){
    			printf("1");
    		}
    		printf("%s\n",last);
    	}
    	else if(first<second){
    		for(i=first-1,j=second-1;i>=0;j--,i--){
    			judge=sec[j]-48+fir[i]-48;
    			if(judge>9&&judge_==0){
    				judge_=1;
    				judge=judge%10;
    				last[j]=judge+48;
    			}
    			else if(judge>9&&judge_==1){
    				judge=judge+1;
    				judge_=1;
    				judge=judge%10;
    				last[j]=judge+48;
    			}
    			else if(judge<=9&&judge_==1){
    				judge=judge+1;
    				if(judge>9){
    					judge_=1;
    					judge=judge%10;
    					last[j]=judge+48;
    				}
    				else{
    					last[j]=judge+48;
    					judge_=0;
    				}
    			}
    			else if(judge<=9&&judge_==0){
    				last[j]=judge+48;
    				judge_=0;
    			}
    		}
    		for(i=-first+second-1;i>=0;i--){
    			if(judge_==0){
    				last[i]=sec[i];
    				judge_=0;
    			}
    			else if(judge_==1){
    				judge=sec[i]-48+1;
    				if(judge>9){
    					judge_=1;
    					judge=judge%10;
    					last[i]=judge+48;
    				}
    				else{
    					judge_=0;
    					last[i]=judge+48;
    				}
    			}
    		}
    		if(judge_==1){
    			printf("1");
    		}
    		printf("%s\n",last);
    	}
    	else{
    		for(i=second-1,j=first-1;i>=0;j--,i--){
    			judge=fir[j]-48+sec[i]-48;
    			if(judge>9&&judge_==0){
    				judge_=1;
    				judge=judge%10;
    				last[j]=judge+48;
    			}
    			else if(judge>9&&judge_==1){
    				judge=judge+1;
    				judge_=1;
    				judge=judge%10;
    				last[j]=judge+48;
    			}
    			else if(judge<=9&&judge_==1){
    				judge=judge+1;
    				if(judge>9){
    					judge_=1;
    					judge=judge%10;
    					last[j]=judge+48;
    				}
    				else{
    					last[j]=judge+48;
    					judge_=0;
    				}
    			}
    			else if(judge<=9&&judge_==0){
    				last[j]=judge+48;
    				judge_=0;
    			}
    		}
    		if(judge_==1){
    			printf("1");
    		}
    		printf("%s\n",last);
    	}
    }
    
    展开全文
  • 为什么C语言会有大数加法这个专门的概念? 难道大数不是直接相加就行了吗? 其实是因为C语言中定义的整数型都是有位数限制的。比如int型的取值范围为-2147483648~+2147483647,即使是long long int的取值范围也只是-...

    大数加法

    为什么C语言会有大数加法这个专门的概念?

    难道大数不是直接相加就行了吗?

    其实是因为C语言中定义的整数型都是有位数限制的。比如int型的取值范围为-2147483648~+2147483647,即使是long long int的取值范围也只是-922 3372 0368 5477 5808 ~ 922 3372 0368 5477 5807。

    这样就导致如果数字超过这个范围就会出错,因此才有大数加法这个概念。

    为了解决数字相加过大导致的错误,我们在计算大数相加的时候不使用整数型来进行计算。而是使用字符串数组来进行计算!

    完整代码如下:

    初学的时候看起可能会有点难度,但是坚持下去就会有很大的收获。

    #include<stdio.h>
    #include<string.h>
    #define N 10000//定义数组的长度,这个长度要大于结果的长度
    int main()
    {
        char sz_1[N]={0},sz_2[N]={0},sz[N]={0};//初始化
        int n,m,z;
        int i;
        printf("请输入第一个数\n");
    	gets(sz_1);
    	printf("请输入第二个数\n");
    	gets(sz_2);
    	n=strlen(sz_1);//计算开始的时候两数的长度
    	m=strlen(sz_2);
    	z=n>m?n:m;//
    	z++;//这里的z++是为了防止结果进位导致不够
    	for(i=0;i<n&&i<m;i++)
        {    //从最后面的数加起,因为最后面的数是最小位
            sz[z-1-i]=sz_1[n-i-1]-'0'+sz_2[m-1-i]-'0';//这里减去'0'才是其真正的数字
        }
        if(n>m)//下面把大的位直接放到数组里
        {
            for(;i<n;i++)
            {
                sz[z-1-i]=sz_1[n-i-1]-'0';
            }
        }
        else
        {
          for(;i<m;i++)
          {
              sz[z-1-i]=sz_2[m-i-1]-'0';
          }
        }
        for(i=z-1;i>0;i--)
        {
            if(sz[i]>=10)
            {
                sz[i]=sz[i]%10;//大于10的数要进位
                sz[i-1]++;
            }
        }
        if(sz[0]!=0)
        {
            for(i=0;i<z;i++)
            {
                sz[i]+='0';//这里与上面对应,加了'0'才是ASCLL码对应的数字
            }
            sz[z]='\0';
        }
        else
        {
            for(i=1;i<z;i++)
            {
                sz[i-1]=sz[i]+'0';
            }
            sz[z-1]='\0';
        }
        printf("两数相加:\n");
        puts(sz);//输出结果验证
        return 0;
    }
    
    

    代码运行结果如下:
    在这里插入图片描述

    总结:大数加法看上去有点难度,但是其实很简单,只需要你认真看完!

    个人心得:兴趣与成就感是我们进步的最大动力!希望可以写自己复习看起舒适,别人一下子就可以看懂的博客。

    展开全文
  • 大数加法定义两个足够大的数字,其数值远超过long的取值范围,设该大数的位数有两百位,求其相加所得大数加法的核心思想详见此链接,内有详细的动画演示,这里不再赘述直接上代码:#include#include#define N 10//...
  • Problem Description I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B. Input The first line of the input contains an integer T(1)
  • #include<stdio.h> #include<string.h> int main() {char a[100],b[100],c[100]; int i,t,l1,l2,l3; gets(a); gets(b); //反序 l1=strlen(a); for(i=0;i<=l1/2;i++) ...}
  • C语言-大数加法

    2018-04-16 12:07:53
    C语言 实现大数加法,在加法运算的时候假如有两个10000位数的两个数进行相加,那么用int long double型都装不下这么多位数,所以采用char数组来实现加法运算,解决精度的问题
  • 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语言实现大数加法

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

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

    2017-02-25 20:52:00
    算法提高 大数加法 时间限制:1.0s 内存限制:256.0MB 问题描述  输入两个正整数a,b,输出a+b的值。 输入格式  两行,第一行a,第二行b。a和b的长度均小于1000位。 输出格式  一行,a+b的值。 ...
  • C语言大数加法

    2019-02-26 21:06:45
    题目描述 求两个不超过200位的非负整数的和。 输入 有两行,每行是一个不超过200位的非负整数,没有多余的前导0。 输出 一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。...
  • C语言——大数加法

    2018-08-02 16:38:26
    #include #include #define MAX 1000 void my_and(char a[],char b[],int m,... if (m>=n)// 大数在前,小数在后,调用函数 my_and(num1,num2,m,n); else my_and(num2,num1,n,m); return 0; }  
  • C语言大数加法

    2017-11-15 19:16:41
    A+B Problem II 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 I have a very simple problem for you. Given two integers A and B, your job is to calculate the ...A,B must be positive. ...The f...
  • C语言大数运算-加法

    万次阅读 多人点赞 2017-04-03 14:31:17
    虽然大多主流的编程语言如java,c++,都有大数运算库,可是c语言标准库并没有提供的大数运算,网上的c语言大数运算大多散而不周或过于复杂,所以本人决定写博客做一些简单的介绍,由于本人水平有限,如有错误或者bug...
  • C 语言实现的斐波那契数列(fibnacii),非递归方式。斐波拉契数列当输入值大于某个值时,基本的整形变量将无法保存其结果,因此本例使用字符串返回斐波拉契的结果,其中包括用字符串实现的大数加法
  • C语言大数运算——加法

    千次阅读 2019-01-30 19:28:15
    这个老到掉牙的大数运算问题,本人一个初学者,在这里发了给自己看吧—,如果可以帮助别人,我也是很开心的哈,不过我这表诉能力,emmm,废话不多说,上干货 123456 + 126 主要问题: 1.大数用什么存放? 2.两个大数...
  • //字符数组存大数 scanf("%d", &n); for (j = 0; j ; j++) { scanf("%s%s", &a1, &a2); lengh_a1 = strlen(a1);//读输入到两个字符数组中的元素个数,用于转换成整形数组 lengh_a2 = strlen(a2); ...
  • 大数加法C语言

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

空空如也

空空如也

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

c语言大数加法

c语言 订阅