大整数的四则运算(C语言实现)(1)——大整数的输入处理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/FelikZhang/article/details/78841341

要想对大整数进行精确的四则运算,首先要解决大整数的输入问题,大整数的输入不能基本的变量类型去接收,而应当使用字符串,下面的代码使用顺序表实现了大整数的输入处理,存储及输出操作。同时对输入数据前导有零的情况进行处理。


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct bigint{
	char *num;	//大整数数据域 
	int sign;	//大整数符号位 
	int digit;	//大整数位数 
}BIGINT;

BIGINT ScanfBigInt();	//大整数的读取处理函数 
void PrintBigInt(BIGINT BigInt);//大整数的输入输出函数

int main(void)
{
	BIGINT BigInt;
	BigInt=ScanfBigInt();
	
	printf("\n\n回到了主函数!\n\n");
	PrintBigInt(BigInt);
	
	printf("处理完可能的前导0后,这是一个%d位数\n",BigInt.digit);//测试代码 
	
	free(BigInt.num);
	return 0;
}

BIGINT ScanfBigInt()
{
	BIGINT BigInt;
	int bit,cnt;
	int i,j,k;
	int num;
	char *tempnum=NULL;
	printf("请输入最大数的位数:"); 
	scanf("%d",&num);
	tempnum=(char *)malloc(sizeof(char)*(num+2));//多两个空间,一个预留存负号,一个存'\0' 
	BigInt.num=(char *)malloc(sizeof(char)*(num+2));
	printf("请输入大整数:");
	scanf("%s",tempnum);
	cnt=strlen(tempnum);
	BigInt.digit=cnt;	//确定大整数的位数
	if(tempnum[0]=='-'){//确定大整数的正负 
		BigInt.sign=-1;
		tempnum[0]='0';//把负号换成字符0,后面统一处理 
	}
	else{
		BigInt.sign=1;
	}
	for(i=0,j=cnt-1;i<cnt;j--,i++){//倒序保存大整数的值 
		BigInt.num[j]=tempnum[i];
	}
	//处理可能存在的前导0 
	for(k=BigInt.digit-1;k>=0 && BigInt.num[k]=='0';k--);
	if(k<BigInt.digit-1){//这个数有前导0 
		BigInt.digit=k+1;
	}
	if(k==-1){//这个数是0
		BigInt.digit=1;
	}
	free(tempnum);
	return BigInt;
}

void PrintBigInt(BIGINT BigInt)
{
	int j;
	if(BigInt.sign==-1){
		printf("-");
	}
	for(j=BigInt.digit-1;j>=0;j--){
		printf("%c",BigInt.num[j]);
	}
	printf("\n输出结束\n");
}

博主学生一枚,文章内容描述有不当之处欢迎大家指正,谢谢。

看完这一篇,点这里看下一篇文章:大整数的加减法运算


猜你喜欢

转载自blog.csdn.net/FelikZhang/article/details/78841341