Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<string.h>
- void Reverse(char s[]) {
- char temp;
- int i, n = strlen(s);
- for (i = 0; i < (n / 2); i++) {
- temp = s[n - i - 1];
- s[n - i - 1] = s[i];
- s[i] = temp;
- }
- }
- int checkInput(char s[]) {
- int i;
- if ((s[0] > '9' || s[0] < '0') && s[0] != '-') return 0;
- for (i = 1; i < strlen(s); i++) {
- if (s[i] > '9' || s[i] < '0') return 0;
- if (s[i] == ' ') return 0;
- }
- return 1;
- }
- void enter(char s[]) {
- int check = 1;
- do {
- gets(s);
- check = checkInput(s);
- if (!check) printf("Please enter again :\n");
- } while (!check);
- }
- int compareNumber(char num1[], char num2[]) {
- if (strlen(num1) > strlen(num2)) return 1;
- if (strlen(num2) > strlen(num1)) return 2;
- int x = strcmp(num1, num2);
- if (x > 0) return 1;
- else if (x < 0) return 2;
- return 3;
- }
- void add0(char num1[], char num2[]) {
- Reverse(num1);
- Reverse(num2);
- while (strlen(num1) < strlen(num2)) strcat(num1, "0");
- while (strlen(num1) > strlen(num2)) strcat(num2, "0");
- }
- void delete0(char s[]) {
- char st[1000];
- int i, j = 0, d;
- for (i = 0; i < strlen(s); i++)
- if (s[i] != '0') {
- d = i;
- break;
- }
- for (i = d; i < strlen(s); i++)
- st[j++] = s[i];
- st[j] = '\0';
- strcpy(s, st);
- if (j == 0) strcpy(s, "0");
- }
- void addNumber(char num1[], char num2[], char sum[1001]) {
- int i, carry = 0;
- add0(num1, num2);
- for (i = 0; i < strlen(num1); i++) {
- sum[i] = num1[i] + num2[i] - 96 + carry;
- carry = sum[i] / 10;
- sum[i] = sum[i] % 10 + 48;
- }
- sum[strlen(num1)] = '\0';
- Reverse(sum);
- }
- void SubNumber(char s1[], char s2[], char s[], int minus) {
- add0(s1, s2);
- int i, h, carry = 0;
- for (i = 0; i < strlen(s1); i++) {
- h = s1[i] - s2[i] - carry;
- if (h < 0) {
- carry = 1;
- s[i] = (h + 10) % 10 + 48;
- } else {
- carry = 0;
- s[i] = h + 48;
- }
- }
- s[strlen(s1)] = '\0';
- Reverse(s);
- delete0(s);
- Reverse(s);
- if (minus == -1) strcat(s, "-");
- Reverse(s);
- }
- void switchToPositive(char s[]) {
- int i;
- for (i = 0; i < strlen(s) - 1; i++)
- s[i] = s[i + 1];
- s[strlen(s) - 1] = '\0';
- }
- void printResult(char s1[], char s2[], char resultAdd[]) {
- printf("%s + %s = %s\n", s1, s2, resultAdd);
- }
- void addTwoPos(char s1[], char s2[], char resultAdd[]) {
- char st1[1000], st2[1000];
- strcpy(st1, s1);
- strcpy(st2, s2);
- addNumber(st1, st2, resultAdd);
- }
- void addNagPos(char s1[], char s2[], char resultAdd[]) {
- char st1[1000], st2[1000];
- strcpy(st1, s1);
- strcpy(st2, s2);
- switchToPositive(st1);
- int x = compareNumber(st1, st2);
- if (x == 1) {
- SubNumber(st1, st2, resultAdd, -1);
- } else if (x == 2) {
- SubNumber(st2, st1, resultAdd, 1);
- } else {
- strcpy(resultAdd, "0");
- }
- }
- void addTowNag(char s1[], char s2[], char resultAdd[]) {
- char st1[1000], st2[1000];
- strcpy(st1, s1);
- strcpy(st2, s2);
- switchToPositive(st1);
- switchToPositive(st2);
- char temp[1000];
- addNumber(st1, st2, temp);
- strcpy(resultAdd, "-");
- strcat(resultAdd, temp);
- }
- int main() {
- char s1[1000], s2[1000], resultAdd[1000];
- while (1) {
- printf("Enter first number : ");
- enter(s1);
- printf("Enter second number : ");
- enter(s2);
- if (s1[0] != '-' && s2[0] != '-') {
- addTwoPos(s1, s2, resultAdd);
- } else if (s1[0] == '-' && s2[0] != '-') {
- addNagPos(s1, s2, resultAdd);
- } else if (s1[0] != '-' && s2[0] == '-') {
- addNagPos(s2, s1, resultAdd);
- } else {
- addTowNag(s1, s2, resultAdd);
- }
- printResult(s1, s2, resultAdd);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment