Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct BigInteger {
- int sign;
- char number[100];
- };
- void swap (struct BigInteger * a, struct BigInteger * b) {
- struct BigInteger temp;
- temp = *a;
- *a = *b;
- *b = temp;
- }
- void swapstr(char * a, char * b) {
- char temp = *a;
- *a = *b;
- *b = temp;
- }
- void reverse(char* str) {
- int i;
- for(i=0;i<strlen(str)/2;i++) swapstr(str+i,str+strlen(str)-1-i);
- }
- struct BigInteger sum(struct BigInteger first, struct BigInteger second) {
- int i,j;
- if(strlen(first.number) < strlen(second.number)) swap(&first, &second);
- char newSum[100];
- reverse(first.number); reverse(second.number);
- if (first.sign == second.sign) {
- int nho = 0;
- for(i=0;i<strlen(second.number);i++) {
- int sum = first.number[i]-'0' + second.number[i]-'0';
- if (nho == 1) {
- sum++;
- nho = 0;
- }
- if (sum >= 10) {
- nho = 1;
- sum-=10;
- }
- newSum[i] = sum+'0';
- }
- if (strlen(first.number) == strlen(second.number))
- if (nho == 1) newSum[i] = '1';
- else {
- for(;i<strlen(first.number);i++) {
- newSum[i]=first.number[i];
- if (nho == 1) {
- newSum[i]++;
- nho = 0;;
- }
- }
- }
- reverse(newSum);
- struct BigInteger tong;
- if (first.sign == 0) tong.sign = 0;
- else tong.sign = 1;
- strcpy(tong.number, newSum);
- return tong;
- } else {
- if (strlen(first.number) == strlen(second.number)) {
- for(i=strlen(first.number)-1;i>=0;i--) {
- if (first.number[i] < second.number[i]) {
- swap(&first, &second);
- break;
- } else if(first.number[i] > second.number[i]) break;
- }
- }
- int nho = 0;
- for(i=0;i<strlen(second.number);i++) {
- int sum = first.number[i]-'0' - (second.number[i]-'0');
- if (nho == 1) {
- sum--;
- nho = 0;
- }
- if (sum < 0) {
- nho = 1;
- sum+=10;
- }
- newSum[i] = sum+'0';
- }
- if (strlen(first.number) > strlen(second.number))
- for(;i<strlen(first.number);i++) {
- newSum[i]=first.number[i];
- if (nho == 1) {
- newSum[i]--;
- nho = 0;
- }
- }
- reverse(newSum);
- struct BigInteger tong;
- if (first.sign == 1) tong.sign = 1;
- else tong.sign = 0;
- strcpy(tong.number, newSum);
- return tong;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement