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

高精度加法与乘法

发布时间:2020-12-14 02:49:41 所属栏目:大数据 来源:网络整理
导读://加法 #include stdio.h#include string.h#define MAXN 200int an1[MAXN+10];int an2[MAXN+10];char szLine1[MAXN+10];char szLine2[MAXN+10];int main(){scanf("%s",szLine1);scanf("%s",szLine2);int i,j;memset(an1,sizeof(an1));memset(an2,sizeof(an2)

//加法

#include <stdio.h>
#include <string.h>
#define MAXN 200

int an1[MAXN+10];
int an2[MAXN+10];
char szLine1[MAXN+10];
char szLine2[MAXN+10];
int main()
{
	scanf("%s",szLine1);
	scanf("%s",szLine2);
	int i,j;
	memset(an1,sizeof(an1));
	memset(an2,sizeof(an2));

	int nlen1 = strlen(szLine1);
	for(j=0,i=nlen1-1;i>=0;i--)
		an1[j++] = szLine1[i]-'0';//逆序整型数组
	int nlen2 = strlen(szLine2);
	for(j=0,i=nlen2-1;i>=0;i--)
		an2[j++] = szLine2[i]-'0';

	for(i=0;i<MAXN;i++)
	{
		an1[i]+=an2[i];	//逐位相加
		if(an1[i]>=10)
		{
			//看是否进位
			an1[i]-=10;
			an1[i+1]++;//进位
		}
	}

	for(i=MAXN;(i>=0)&&(an1[i]==0);i--);
	if(i>=0)
	{
		for(;i>=0;i--)
			printf("%d",an1[i]);
	}
	else printf("0n");

	return 0;
} 

//乘法

#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000

int a[MAX_LEN+10],b[MAX_LEN+10],c[MAX_LEN*2+10];
char str1[MAX_LEN+10],str2[MAX_LEN+10];
int main()
{
	scanf("%s",str1);
	scanf("%s",str2);
	int i,j;
	int len1,len2;
	len1 = strlen(str1);
	len2 = strlen(str2);
	memset(a,sizeof(a));
	memset(b,sizeof(b));

	for(j=0,i=len1-1;i>=0;i--)//倒转第一个整数
		a[j++] = str1[i]-'0';
	for(j=0,i=len2-1;i>=0;i--)
		b[j++] = str2[i]-'0';

	for(i=0;i<len1;i++)	//两数字相乘,每次一位
	{
		for(j=0;j<len2;j++)
			c[i+j] += b[j]*a[i]; //先乘起来,后面统一处理进位
								 //一个数的第i位和另一个数的第j位相乘所得的数,是要累加到结果的第[i+j]位上的
	}

	for (i = 0; i < MAX_LEN*2; i++) //统一处理进位循环问题
	{
		if(c[i]>=10)
		{
			c[i+1]+=c[i]/10;	//后一位加上进位
			c[i]%=10;			
		}
	}

	for(i=MAX_LEN*2;(c[i]==0)&&(i>=0);i--); //跳过高位的0
	if(i>=0)
		for(;i>=0;i--)
			putchar('0'+c[i]);
	else
		printf("0");

	return 0;
}

(编辑:李大同)

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

    推荐文章
      热点阅读