长整数的加减运算(数组)

it2023-11-02  69

长整数的每位上的数字必须为数字[0——9]之间。测试的时候输入数据,当输入回车键的时候结束输入,如果输入的字符不符合题目要求,则程序能过滤这些不符合要求的字符。

输入

输入一个整数 输入‘+’或‘-’ 输入另外一个整数 如果输入非数字将输出“error”

#include <stdio.h> #include <stdlib.h> #include <string.h> #define M 1000000 void add(char*b1,char*b2) //加法 { int i=0,j=0; int len1=strlen(b1); //计算长度 int len2=strlen(b2); int len; if(len1>len2) { len=len1; b1[len]='\0'; b2[len]='\0'; for(i=len2-1,j=len-1;i>=0;i--,j--) //尾部对齐 b2[j]=b2[i]; for(i=0;i<len-len2;i++) //补零 使两个串的长度相等 b2[i]='0'; } else { len=len2; b1[len]='\0'; b2[len]='\0'; for(i=len1-1,j=len-1;i>=0;i--,j--) b1[j]=b1[i]; for(i=0;i<len-len1;i++) b1[i]='0'; } char arr[len+1]; arr[0]='0'; for(i=len,j=len-1;j>=0;j--,i--) { if(b1[j]+b2[j]-'0'>'9'&&j!=0) //进位 { b1[j-1]++; arr[i]=b1[j]+b2[j]-'9'-1; } else if(b1[j]+b2[j]-'0'>'9'&&j==0) //判断开头是否需要进位 { arr[1]=b1[0]+b2[0]-'9'-1; arr[0]++; } else { arr[i]=b1[j]+b2[j]-'0'; //相加 } } int dig=0; for(i=0;i<len+1;i++) { if(arr[i]!='0') //消去开头的0 { dig=1; } if(dig==1) printf("%c",arr[i]); else continue; } } void sub(char*b1,char*b2) //减法 { int flag=0,i,j; int len1=strlen(b1); int len2=strlen(b2); int len; if(len1>len2) { len=len1; b1[len]='\0'; b2[len]='\0'; for(i=len2-1,j=len-1;i>=0;i--,j--) b2[j]=b2[i]; for(i=0;i<len-len2;i++) b2[i]='0'; } else { len=len2; b1[len]='\0'; b2[len]='\0'; for(i=len1-1,j=len-1;i>=0;i--,j--) b1[j]=b1[i]; for(i=0;i<len-len1;i++) b1[i]='0'; } if(len2>len1) //判断正负 { flag=1; } else if(len2==len1) { for(i=0;i<len1;i++) { if(b1[i]>b2[i]) { flag=0; break; } else if(b1[i]<b2[i]) { flag=1; break; } } } char arr[len]; if(strcmp(b1, b2)==0) //若两个数相等输出0 { printf("0"); return 0; } else if(flag==1) { printf("-"); for(i=len-1;i>=0;i--) { if(b2[i]>=b1[i]) arr[i]=b2[i]-b1[i]+'0'; else //借位 { b2[i-1]--; arr[i]=b2[i]+10-b1[i]+'0'; } } } else { for(i=len-1;i>=0;i--) { if(b1[i]>=b2[i]) arr[i]=b1[i]-b2[i]+'0'; else { b1[i-1]--; arr[i]=b1[i]+10-b2[i]+'0'; } } } int dig=0; for(i=0;i<len;i++) { if(arr[i]!='0') { dig=1; } if(dig==1) printf("%c",arr[i]); else continue; } } void judge(char*a) //判断输入是否是数字 { int i,flag=0,dig=0; while(1) { int len=strlen(a); flag=0; for(i=0;i<len;i++) { if(a[i]<'0'||a[i]>'9') { flag=1; break; } } if(flag==1) { printf("输入错误,请重新输入:\n"); gets(a); } else break; } } int main() { char ch; char s1[M]={'0'}; char s2[M]={'0'}; printf("请输入第一个数字:\n"); gets(s1); judge(s1); printf("请输入+或者-:\n"); while(1) { scanf("%c",&ch); getchar(); if((ch=='+')||(ch=='-')) break; else printf("输入错误,请重新输入+或-\n"); } printf("请输入第二个数字:\n"); gets(s2); if(ch=='+') { judge(s2); add(s1,s2); } else { judge(s2); sub(s1,s2); } return 0; }
最新回复(0)