class-notes/高精度.md
2025-04-01 23:54:12 +08:00

1.1 KiB

高精度加法

#include <stdio.h>
#include <string.h>

int main(){
	char str1[200], str2[200], result[201] = {0};
	int i, j, k = 0, t = 0;

	scanf("%s %s", str1, str2);
	i=strlen(str1)-1;
	j=strlen(str2)-1;
	while(i >= 0 || j >= 0){
		if(i >= 0) t+=str1[i--]-48;
		if(j >= 0) t+=str2[j--]-48;
		result[k++] = t%10+48;
		t /= 10;
	}
	if(t != 0){
		result[k++] = t+48;
	}
	
	for(i=k-1;i>=0;i--){
		putchar(result[i]);
	}
	puts("");

	return 0;
}

高精度乘法

#include <stdio.h>
#include <string.h>

int main(){
	char str1[200], str2[200], temp[200],result[1000] = {0};
	int i, j, k, t;
	scanf("%s%s", str1, str2);
	
	j=strlen(str2)-1;
	
	while(j>=0){
		k=0;
		for(i=strlen(str1)-1;i>=0;i--){
			t = k + strlen(str2)-1-j;
			result[t+1] += (result[t] + (str1[i]-48)*(str2[j]-48))/10;
			result[t] = (result[t] + (str1[i]-48)*(str2[j]-48))%10;
			k++;
		}
		j--;
	}
	k+=strlen(str2)-1;
	while(result[k]==0) k--;//È¥µô¿Õ¸ñ
	
	while(k>=0){
		putchar(result[k] + 48);
		k--;
	} 
	puts("");


	return 0;
}

高精度减法

高精度乘法