首页 > 学院 > 开发设计 > 正文

C_算法 大整数加法(大数相加)

2019-11-06 08:18:13
字体:
来源:转载
供稿:网友
 问题:求两个不超过200位的非负整数的和。 输入:22222222222222222222           33333333333333333333 输出: 55555555555555555555 C语言中最大的整型数据类型是long类型,占4个字节 C中短整型和整型均占2个字节,取值范围是 -32768 ~~~ 32767 长整型占4个字节,取值范围是 -2147483648 ~~~~ 2147483647 如果是无符号数的话,可以表示的数据就是 短整型和 整型:  0--- 65535 长整型:             0---4294967295             当数据超过能长整型所能表示的范围以后,如果继续做加减会使得到的结果出错,所以这时候我们就需要用到数组来存储位数,用最简单的位数相加来对大数的各个位数做加法运算 思路:先用两个char类型的字符串类型来存储大数各个位数,因为char字符型不方便做加法位运算,所以接下来就把char类型数组转换为int类型数组,在int类型上数组做加法位运算,然后把int类型数组上的各个数打印出来就是最后的结果例如题目所示                         00000000000022222222222222222222                     +  00000000000033333333333333333333                -----------------------------------------------------------------                         00000000000055555555555555555555      当位数出现进位情况也类似,我们只需要对相同位数上的数进行位运算就可以了
#include<stdio.h>#include<string.h>int main(){	int  i,j,str1,str2,k=0;     //k用来表示bool值,0假1真 	int  a1[255],a2[255],a3[255];     	char c1[255],c2[255];     //用字符方式存储两个大数的数值    	for(i=0;i<255;i++)	{		a1[i]=0;               //把int数组内所有数内置为0 		a2[i]=0;	}		scanf("%s",c1);	scanf("%s",c2);           //用char类型c1,c2存储大数的值 	 	     str1=strlen(c1);          //用str1表示读入第一个数的长度 	str2=strlen(c2);          //用str2表示读入第二个数的长度 		j=0;	for(i=str1-1;i>=0;i--)    //用int类型的数组来来存放大数的位数 	a1[j++]=c1[i]-'0';       		j=0;	for(i=str2-1;i>=0;i--)	a2[j++]=c2[i]-'0';	     for(i=0;i<255;i++)         //大数位数相加如果大于10就向前一位数进1     {    	a1[i]+=a2[i];    	if(a1[i]>=10)    	{	    	a1[i]-=10;	    	a1[i+1]++;	    }    }                                  //例如a1相加后的结果是1234     j=0;                         //a1表示就是1234000...000     for(i=254;i>=0;i--)          //a3变化后为000...0001234     a3[j++]=a1[i];               //下边目的就是想办法把这些前置的0给消除         for(i=0;i<255;i++)             {                              	if(a3[i]!=0)   k=1;           //当从第一位数一直到非0的数我们都不需要打印 	if(k==1)   PRintf("%d",a3[i]);//当第一位非0的数出现时候我们把剩下的数打印出来 	}		if(k==0)  printf("0");        //当输入两个0的时候出现的特殊情况  	                              //不加这行程序不会帮你输出结果0 	printf("/n");	return 0;	}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表