要想对大整数进行精确的四则运算,首先要解决大整数的输入问题,大整数的输入不能基本的变量类型去接收,而应当使用字符串,下面的代码使用顺序表实现了大整数的输入处理,存储及输出操作。同时对输入数据前导有零的情况进行处理。
#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");
}
博主学生一枚,文章内容描述有不当之处欢迎大家指正,谢谢。
看完这一篇,点这里看下一篇文章:大整数的加减法运算