加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

C语言中大数的计算

发布时间:2020-12-14 03:52:01 所属栏目:大数据 来源:网络整理
导读:/*在C中不同Java中有BigInteger类,可以计算很大的数,所以为了解决这个问题我们可以模拟手算,一位一位的相加:*/#includestdio.h#includestring.hvoid main(){char a[1024]={0},b[1024]={0};int c[1026]={0};//保存结果的数组gets(a);gets(b);int len1 = s

/*在C中不同Java中有BigInteger类,可以计算很大的数,所以为了解决这个问题我们可以模拟手算,一位一位的相加:*/

#include<stdio.h>
#include<string.h>
void main()
{
	char a[1024]={0},b[1024]={0};
	int c[1026]={0};//保存结果的数组
	gets(a);
	gets(b);
	int len1 = strlen(a);
	int len2 = strlen(b);
    int min = len1<len2?len1:len2;
	int max = len1<len2?len2:len1;
	int temp = 0;//进位的位数
	int j=0;//c的数组下标
	for(int i=max-1;i>=0;i--)//首先从长度较长的最后一位(也就是个位数)相加
	{
		int num1,num2;
		
		if(len1>len2)
		{
			if(i-len1+len2>=0)
			{
				num1 = a[i]-'0';//减去'0',得到Int值,后面类似
				num2 = b[i-len1+len2]-'0';//取得较短的字符的最后一位(也就是个位数)
			}
			else//当较短的字符串取完了,就可以将num2直接赋值为0了
			{
				num1 = a[i]-'0';
				num2 = 0;
			}
		}
		else
		{
			if(i-len2+len1>=0)
			{
				num1 = b[i]-'0';
				num2 = a[i-len2+len1]-'0';
			}
			else
			{
				num1 = b[i]-'0';
				num2 = 0;
			}
		}
		int sum = num1 + num2 +temp;
		c[j++] = sum%10;
		temp = sum/10;
	}
	c[j] = temp;//最后注意可能有进位的情况,所以需要再进一位
	
	int start = 0;
	for(int k=1026-1;k>=0;k--)
	{
		if(c[k]>0)
		{
			start = k;//得到数组从那一位开始存了数字
			break;
		}
	
	}
	for(int m=start;m>=0;m--)//开始打印
	{
		printf("%d",c[m]);
	}
	printf("n");
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读