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

大数运算模板

发布时间:2020-12-14 03:35:13 所属栏目:大数据 来源:网络整理
导读:#include stdio.h#include string.h# includemalloc.hint dividor(char* a,int b,char* c) //返回余数,商保存在c[]{int i,j,temp = 0,n;char* s;n = strlen(a);s = (char*)malloc(sizeof(char)*(n + 1));for (i = 0; a[i] != 0; i++){temp = temp * 10 + a[

#include <stdio.h>
#include <string.h>
# include<malloc.h>
int dividor(char* a,int b,char* c) //返回余数,商保存在c[]
{
	int i,j,temp = 0,n;
	char* s;
	n = strlen(a);
	s = (char*)malloc(sizeof(char)*(n + 1));
	for (i = 0; a[i] != 0; i++)
	{
		temp = temp * 10 + a[i] - '0';
		s[i] = temp / b + '0';
		temp %= b;
	}
	s[i] = '';
	for (i = 0; s[i] == '0'&&s[i] != ''; i++);
	if (s[i] == '')
	{
		c[0] = '0';
		c[1] = '';
	}
	else
	{
		for (j = 0; s[i] != ''; i++,j++)
			c[j] = s[i];
		c[j] = '';
	}
	free(s);
	return temp;
}

void mul(char *a,char *b,char *c)  //大数乘法,结果保存在c[]
{
	int temp[2500];
	int i,l;
	int la = strlen(a);
	int lb = strlen(b);
	for (i = 0; i < la + lb; i++)
		temp[i] = 0;
	for (i = la - 1; i >= 0; i--) {
		l = la - 1 - i;
		for (j = lb - 1; j >= 0; j--) {
			temp[l] = (b[j] - '0')*(a[i] - '0') + temp[l];
			l++;
		}
	}
	while (temp[l] == 0)
		l--;
	for (i = 0; i <= l; i++) {
		temp[i + 1] += temp[i] / 10;
		temp[i] = temp[i] % 10;
	}
	if (temp[l + 1] != 0)
		l++;

	while (temp[l] / 10 != 0) {
		temp[l + 1] += temp[l] / 10;
		temp[l] = temp[l] % 10;
		l++;
	}
	if (temp[l] == 0)
		l--;
	i = 0;
	while (l >= 0) {
		c[i] = temp[l] + '0';
		i++;
		l--;
	}
	c[i] = '';
}

void add(char* a,char* b,char* c)//大数加法,结果保存在c[]
{
	int i,k,max,min,n,temp;
	char *s,*pmax,*pmin;
	max = strlen(a);
	min = strlen(b);
	if (max < min)
	{
		temp = max;
		max = min;
		min = temp;
		pmax = b;
		pmin = a;
	}
	else
	{
		pmax = a;
		pmin = b;
	}
	s = (char*)malloc(sizeof(char)*(max + 1));
	s[0] = '0';
	for (i = min - 1,j = max - 1,k = max; i >= 0; i--,j--,k--)
		s[k] = pmin[i] - '0' + pmax[j];
	for (; j >= 0; j--,k--)
		s[k] = pmax[j];
	for (i = max; i >= 0; i--)
	if (s[i] > '9')
	{
		s[i] -= 10;
		s[i - 1]++;
	}
	if (s[0] == '0')
	{
		for (i = 0; i <= max; i++)
			c[i - 1] = s[i];
		c[i - 1] = '';
	}
	else
	{
		for (i = 0; i <= max; i++)
			c[i] = s[i];
		c[i] = '';
	}
	free(s);
}

void subtract(char* a,char* c) //大数减法,结果保存在c[]
{
	int i,ca,cb;
	ca = strlen(a);
	cb = strlen(b);
	if (ca > cb || (ca == cb&&strcmp(a,b) >= 0))
	{
		for (i = ca - 1,j = cb - 1; j >= 0; i--,j--)
			a[i] -= (b[j] - '0');
		for (i = ca - 1; i >= 0; i--)
		if (a[i] < '0')
		{
			a[i] += 10;
			a[i - 1]--;
		}
		i = 0;
		while (a[i] == '0')
			i++;
		if (a[i] == '')
		{
			c[0] = '0';
			c[1] = '';
		}
		else
		{
			for (j = 0; a[i] != ''; i++,j++)
				c[j] = a[i];
			c[j] = '';
		}
	}
	else
	{
		for (i = ca - 1,j = cb - 1; i >= 0; i--,j--)
			b[j] -= (a[i] - '0');
		for (j = cb - 1; j >= 0; j--)
		if (b[j] < '0')
		{
			b[j] += 10;
			b[j - 1]--;
		}
		j = 0;
		while (b[j] == '0')
			j++;
		i = 1;
		c[0] = '-';
		for (; b[j] != ''; i++,j++)
			c[i] = b[j];
		c[i] = '';
	}
}

int main()
{
	char a[100],b[100],c[100];
	while (scanf("%s%s",a,b) != EOF)
	{
		subtract(a,b,c);
		puts(c);
	}
	return 0;
}

(编辑:李大同)

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

    推荐文章
      热点阅读