6.15大数加法(十进制和十六进制)

来源:互联网 发布:cf电脑版刷枪软件 编辑:程序博客网 时间:2024/05/12 02:41
#include <stdio.h>#include <string.h>void Swap(char &a,char &b){char t = a;a =b;b = t;}void ReverseString(char *s){int i=0;int j= strlen(s)-1;while (i<j){Swap(s[i],s[j]); i++; j--;}}void Add(char *A,char *B,char *C){char AA[200]; char BB[200];strcpy(AA,A);ReverseString(AA); strcpy(BB,B);ReverseString(BB);int carry =0 ;int lenA = strlen(AA);int lenB = strlen(BB);int lenZ=0;int i=0;for (i=0; i<lenA && i<lenB ; ++i){int tmp = carry+AA[i]-'0'+BB[i]-'0';carry = tmp/10;C[lenZ++] = tmp%10+'0';}while (i<lenA){int tmp = carry+AA[i]-'0';carry = tmp/10;C[lenZ++] = tmp%10 +'0';++i;}while (i<lenB){int tmp = carry+BB[i]-'0';carry = tmp/10;C[lenZ++] = tmp%10 +'0';++i;}if(carry){C[lenZ++] = carry+'0';}while (C[lenZ-1]=='0'){lenZ--;}C[lenZ]=0;ReverseString(C);}int main(){char A[200];char B[200];char C[201];char S[400];scanf("%s",S);int pos ;int lenS =strlen(S);for (int i=0;i<lenS;++i)    //查找加号{if(S[i]=='+') {pos=i;break;}}int i;for (i=0;i<pos;++i)            //前面复制给A{A[i]=S[i];}A[i]=0;for (i=pos+1;i<lenS;++i)          //后面复制给B{B[i-pos-1]=S[i];}B[lenS-pos-1]=0;//strcpy(A,"1234");//strcpy(B,"23456");Add(A,B,C);printf("%s\n",C);return 0;}



#include <stdio.h>#include <string.h>void Swap(char &a,char &b){char t = a;a =b;b = t;}void ReverseString(char *s){int i=0;int j= strlen(s)-1;while (i<j){Swap(s[i],s[j]); i++; j--;}}void Add(char *A,char *B,char *C){char AA[200]; char BB[200];strcpy(AA,A);ReverseString(AA); strcpy(BB,B);ReverseString(BB);int carry =0 ;int lenA = strlen(AA);int lenB = strlen(BB);int lenZ=0;int i=0;for (i=0; i<lenA && i<lenB ; ++i){int tmp = carry;if (AA[i]>='A' && AA[i]<='F'){tmp+= (AA[i]-'A'+10);} else{tmp+= (AA[i]-'0');}if (BB[i]>='A' && BB[i]<='F'){tmp+= (BB[i]-'A'+10);} else{tmp+= (BB[i]-'0');}carry = tmp/16;tmp = tmp%16;if (tmp<10){C[lenZ++] = tmp+'0';} else{C[lenZ++] = tmp-10+'A';}}while (i<lenA){int tmp = carry;if (AA[i]>='A' && AA[i]<='F'){tmp+= (AA[i]-'A'+10);} else{tmp+= (AA[i]-'0');}carry = tmp/16;tmp = tmp%16;if (tmp<10){C[lenZ++] = tmp+'0';} else{C[lenZ++] = tmp-10+'A';}++i;}while (i<lenB){int tmp = carry;if (BB[i]>='A' && BB[i]<='F'){tmp+= (BB[i]-'A'+10);} else{tmp+= (BB[i]-'0');}carry = tmp/16;tmp = tmp%16;if (tmp<10){C[lenZ++] = tmp+'0';} else{C[lenZ++] = tmp-10+'A';}++i;}if(carry){if (carry<10){C[lenZ++] = carry+'0';} else{C[lenZ++] = carry-10+'A';}}while (C[lenZ-1]=='0'){lenZ--;}C[lenZ]=0;ReverseString(C);}int main(){char A[200];char B[200];char C[201];strcpy(A,"0000000001");strcpy(B,"FFFFFFFFFFFF");Add(A,B,C);printf("%s\n",C);}


原创粉丝点击