⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 高精度整数运算.c

📁 练习程序
💻 C
字号:
#include <stdio.h>
#include <string.h>

int neg[3] = {0, 0, 0};
char ot[101] = "0";

void print(char*);
char* add(char*, char*);
char* minus(char*, char*);
char* multiply(char*, char*);
int format(char*, char*);


main()
{
	char m[101] = "", n[101] = "", temp[51];
	char op;
	char *out;
	int i, j = 0;
	gets(temp);
	if(temp[0] == '-')
		neg[0] = 1;
	for(i = strlen(temp) - 1; i >= neg[0]; i--, j++)
		m[j] = temp[i];
	gets(&op);
	j = 0;
	gets(temp);
	if(temp[0] == '-')
		neg[1] = 1;
	for(i = strlen(temp) - 1; i >= neg[1]; i--, j++)
		n[j] = temp[i];
	switch(op)
	{
	case '+':
		out = add(m, n);
		break;
	case '-':
		out = minus(m, n);
		break;
	case '*':
		out = multiply(m, n);
		break;
	}
	print(out);
}

int format(char* m, char* n)
{
	char temp[100];
	int tmp;
	int x = strlen(m);
	if(strlen(m) == strlen(n))
	{
		while(m[x] == n[x])
			x--;
	}
	if(x == -1) return 0;
	if((strlen(m) < strlen(n)) || (strlen(m) == strlen(n) && m[x] < n[x]))
	{
		strcpy(temp, m);
		strcpy(m, n);
		strcpy(n, temp);
		tmp = neg[0];
		neg[0] = neg[1];
		neg[1] = tmp;
		return 1;
	}
	return 0;
}

void print(char* out)
{
	int i;
	int st = 0;
	for(i = 0; i < strlen(out); i++)
	{
		if(out[i] != '0')
			break;
	}
	if(i >= strlen(out))
	{
		printf("0\n");
		return;
	}
	if(neg[3])
		printf("-");
	for(i = strlen(out) - 1; i >= 0; i--)
	{
		if(out[i] != '0')
			st = 1;
		if(st)
			printf("%c", out[i]);
	}
	printf("\n");

}

char* add(char* m, char* n)
{
	int jwf = 0, i;
	format(m, n);
	if(neg[0])
		neg[3] = 1;
	if(neg[0] && !neg[1])
	{
		neg[0] = 0;
		return minus(n, m);
	}
	else if(!neg[0] && neg[1])
	{
		neg[1] = 0;
		return minus(m, n);
	}
	else
	{
		for(i = 0; i < strlen(n); i++)
		{
			m[i] += (n[i] - '0' + jwf);
			if(m[i] > '9')
			{
				jwf = 1;
				m[i] = '0' + m[i] - ('9' + 1);
			}
			else
				jwf = 0;
		}
		while(jwf)
		{
			if(i == strlen(m))
			{
				m[i] = '1';
				break;
			}
			m[i]++;
			if(m[i] > '9')
			{
				jwf = 1;
				m[i] = '0';
			}
			else
				jwf = 0;
			i++;
		}
	}
	return m;
}

char* minus(char* m, char* n)
{
	int f, jwf = 0, i;
	if(neg[0] && !neg[1])
	{
		neg[1] = 1;
		return add(m, n);
	}
	if(!neg[0] && neg[1])
	{
		neg[1] = 0;
		return add(m, n);
	}
	f = format(m, n);
	if(neg[0] && neg[1])
		neg[3] = 1;
	if(f)
		neg[3] = ((neg[3] == 1) ? 0 : 1);
	for(i = 0; i < strlen(n); i++)
	{
		m[i] -= (n[i] - '0' + jwf);
		if(m[i] < '0')
		{
			jwf = 1;
			m[i] = '9' + 1 - ('0' - m[i]);
		}
		else
			jwf = 0;
	}
	while(jwf)
	{
		m[i]--;
		if(m[i] < '0')
		{
			jwf = 1;
			m[i] = '9';
		}
		else
			jwf = 0;
		i++;
	}
	return m;
}

char* multiply(char* m, char* n)
{
	int i, j, k;
	char temp[101] = "", p[101];
	char c[2] = {'0', '\0'}	;
	format(m, n);
	strcpy(p, m);
	if((neg[0] && !neg[1]) || (!neg[0] && neg[1]))
		neg[3] = 1;
	neg[0] = neg[1] = 0;
	for(i = 0; i < strlen(n); i++)
	{
		for(j = 0; j < n[i] - '0'; j++)
		{
			for(k = 0; k < i; k++)
				strcat(temp, c);
			strcat(temp, p);
			strcpy(m, temp);
			strcpy(ot, add(m, ot));
			temp[0] = '\0';
		}
		

		
	}
	return ot;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -