您好,欢迎访问三七文档
#includestdio.h#includeconio.h#includestring.h#defineN20//数字字符的个数voidbeep();voidGetNumberStr(chars[]);voidAddNumberStr(chara[],charb[],charc[]);charAddChar(charch1,charch2);voidLeftTrim(charstr[]);inttag=0;//进位标志,全局变量voidmain(){chara[N+1]={0},b[N+1]={0},c[N+2];printf(a=);while(strlen(a)==0)//输入被加数aGetNumberStr(a);printf(\nb=);while(strlen(b)==0)//输入加数bGetNumberStr(b);AddNumberStr(a,b,c);//计算和数cprintf(\na-b=%s\n,c);//显示计算结果}//读取数字字符串voidGetNumberStr(chars[]){inti=0;charch;while(1){ch=getch();//读取输入的字符,不显示if(ch=='\r')//回车符,退出break;if(ch=='\b')//退格符{if(i0){printf(%c%c,ch,ch);//退格并抹除最后输入的一个字符//printf(%c,ch);//退格,但没有抹除最后输入的一个字符i--;}elsebeep();continue;}//ifif(ch'0'||ch'9')//非数字字符{beep();continue;}if(iN)//数字字符{printf(%c,ch);s[i++]=ch;}elsebeep();}//while(1)s[i]='\0';//置字符串结束标志}//响铃voidbeep(){printf(\07);}voidAddNumberStr(chara[],charb[],charc[]){inti,j,k;memset(c,'',N+2);i=strlen(a)-1;j=strlen(b)-1;k=N;intstrcmp(a,b);if((strlen(a)strlen(b))||((strlen(a)==strlen((b)))&&(strcmp(a,b)0))){while(i=0&&j=0)c[k--]=AddChar(a[i--],b[j--]);while(i=0)c[k--]=AddChar(a[i--],'0');while(j=0)c[k--]=AddChar(b[j--],'0');c[N+1]='\0';LeftTrim(c);}if((strlen(a)strlen(b))||((strlen(a)==strlen(b))&&(strcmp(a,b)0))){while(i=0&&j=0)c[k--]=AddChar(b[i--],a[j--]);while(i=0)c[k--]=AddChar(b[i--],'0');while(j=0)c[k--]=AddChar(a[j--],'0');c[k]='-';c[N+1]='\0';LeftTrim(c);}}charAddChar(charch1,charch2){charch;ch=(ch1-ch2);if(tag==-1){ch=ch-1;if(ch0){tag=-1;return(ch+10+0x30);}else{tag=0;return(ch+0x30);}}if(tag==0){if(ch0){tag=-1;return(ch+10+0x30);}else{tag=0;return(ch+0x30);}}}//去掉字符串左边的空格voidLeftTrim(charstr[]){inti;//查找第一个非空格字符的位置for(i=0;str[i]=='';i++);strcpy(str,str+i);}
本文标题:c语言长整数减法
链接地址:https://www.777doc.com/doc-6645236 .html