Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <cstdlib>
- void atoi(char *s);
- void itoa(char *i);
- void reverse(char *s);
- void swap(char *a, char *b);
- int minus(char *diff, char *red, char *sub);
- void plus(char *sum, char *a, char *b);
- int repear(char *bad);
- #define M_SIZE 512
- int main(){
- char a[M_SIZE], b[M_SIZE], c[M_SIZE];
- int res;
- gets(a), gets(b);
- printf("putin - krabe\n");
- atoi(a), atoi(b);
- printf("why is putin eat children?\n");
- res = minus(c, a, b);
- printf("lol\n");
- itoa(a); itoa(b); itoa(c);
- if(res)
- printf("%s - %s = %s\n", a, b, c);
- else
- printf("We are not work with negative numbers!\n");
- return 0;
- }
- void atoi(char *s){
- int i = 0;
- reverse(s);
- while(s[i]) s[i++] -= '0';
- s[i] -= 1;
- }
- void itoa(char *i){
- int j = 0;
- while(i[j] != -1) i[j++] += '0';
- i[j] += 1;
- reverse(i);
- }
- void reverse(char *s){
- int i = 0, j = 0;
- while(s[++i]);
- while(i > j) swap(s + (--i), s + j++);
- }
- void swap(char *a, char *b){
- char t = *a;
- *a = *b;
- *b = t;
- }
- void plus(char *sum, char *a, char *b){
- int i = 0;
- while(a[i] != -1 && b[i] != -1) sum[i++] = a[i] + b[i]; //сначала вычисляется выражение справа (a и b), потом sum, так что i++ стоит там где надо
- if(a[i] == -1)
- while(b[i] != -1) sum[i++] = b[i];
- else
- while(a[i] != -1) sum[i++] = a[i];
- sum[i] = -1;
- repear(sum);
- }
- int minus(char *diff, char *red, char *sub){//difference, reduce, substra(ct/hend)
- int i = 0;
- while(red[i] != -1 && sub[i] != -1) diff[i++] = red[i] - sub[i]; //сначала вычисляется выражение справа (a и b), потом sum, так что i++ стоит там где надо
- if(red[i] == -1)
- while(red[i] != -1) diff[i++] = sub[i];
- else
- while(red[i] != -1) diff[i++] = red[i];
- diff[i] = -1;
- return repear(diff);
- }
- int repear(char *bad){
- int i = 0;
- while(bad[i] != -1){
- if(bad[i] < 0){
- bad[i+1]--;
- bad[i] += 10;
- }if(bad[i] / 10){ //нужно делать лишнюю проверку на наличие переполнение для сохранения "валидности" конца массива
- if(bad[i+1] != -1) bad[i+1] += bad[i]/10;
- else{
- bad[i+1] = bad[i]/10;
- bad[i+2] = -1;
- }bad[i++] %= 10;
- }
- }
- return (bad[i-1] < 0) ? 0 : 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement