Новичок
Профиль
Группа: Участник
Сообщений: 1
Регистрация: 25.11.2012
Репутация: нет Всего: нет
|
Пишу калькулятор больших чисел. (+, -, /, *). Все эти действия уже написаны и работают, вот только надо создать единую программу. Создать типа менюшки, для выбора действия. Можно через CASE, как вам удобно. Сложение: | Код | #include <stdio.h> #include <string.h> #include <stdlib.h>
void vvod(char *ar, int &n); void nol(char *ar, int &m, int n); void slogenie(char a[], int &n, char b[], int m);
int main() { char a[1000],b[1000]; int i,na,nb; printf("‘«®¦Ґ*ЁҐ\n\n"); // Инициализация vvod(a, na); vvod(b, nb); // Сложение slogenie(a,na,b,nb); // Вывод ответа printf("ЋвўҐв: "); for(i=0; i<na; i++) printf("%d",a[i]); // Пауза printf("\n\n"); system("PAUSE"); return 0; } // Ввод данных void vvod(char *ar, int &n) { int i=0; printf("‚ўҐ¤ЁвҐ зЁб«®: "); ar[i]=getchar(); while(ar[i]!='\n') { ar[i]-=48; i++; ar[i]=getchar(); } n=i; printf("\n"); } // Дополняем нулями void nol(char *ar, int &m, int n) { int i,j; for(i=0; i<n-m; i++) for(j=n-1; j>0; j--) ar[j]=ar[j-1]; for(i=0; i<n-m; i++) ar[i]=0; m=n; } // Слоежение void slogenie(char a[], int &n, char b[], int m) { char c[1000]; int i,j,l,o; // Дополняем нулями if(n>m) nol(b,m,n); else if(n<m) nol(a,n,m); // Обнуляем резултат for(i=0; i<n+1; i++) c[i]=0; // Сложение o=0; l=0; for(j=n; j>0; j--) { c[j]+=(a[j-1] + b[j-1] + o)%10; if(c[j]>9) { l=1; c[j]=c[j]%10; } o=(a[j-1] + b[j-1] + o)/10+l; if(j==1) c[0]+=o; l=0; } // Избавляемся от ведущих нулей while(c[0]==0) { for(j=0; j<n; j++) c[j]=c[j+1]; if(n!=0) n--; else break; } while(b[0]==0) { for(j=0; j<m-1; j++) b[j]=b[j+1]; if(m!=1) m--; else break; } n++; // Вывод результата for(i=0; i<n; i++) a[i] = c[i]; }
|
Вычитание: | Код | #include <stdio.h> #include <string.h> #include <stdlib.h>
void vvod(char *ar, int &n); void nol(char *ar, int &m, int n); void vichitanie(char a[], int &n, char b[], int &m);
int main() { char a[1000],b[1000]; int i,na,nb; printf("‚лзЁв**ЁҐ\n\n"); // Инициализация vvod(a, na); vvod(b, nb); // Вычитание vichitanie(a,na,b,nb); // Вывод ответа printf("ЋвўҐв: "); for(i=0; i<na; i++) printf("%d",a[i]); // Пауза printf("\n\n"); system("PAUSE"); return 0; } // Ввод данных void vvod(char *ar, int &n) { int i=0; printf("‚ўҐ¤ЁвҐ зЁб«®: "); ar[i]=getchar(); while(ar[i]!='\n') { ar[i]-=48; i++; ar[i]=getchar(); } n=i; printf("\n"); } // Дополняем нулями void nol(char *ar, int &m, int n) { int i,j; for(i=0; i<n-m; i++) for(j=n-1; j>0; j--) ar[j]=ar[j-1]; for(i=0; i<n-m; i++) ar[i]=0; m=n; } // Вычитание void vichitanie(char a[], int &n, char b[], int &m) { char c[1000]; int i,j,o; //Дополняем нулями if(n>m) nol(b,m,n); else if(n<m) nol(a,n,m); //Обнуляем резултат for(i=0; i<n; i++) c[i]=0; //Вычитание o=0; for(j=n-1; j>=0; j--) { c[j] += a[j] - b[j] + o; o=0; if(c[j]<0) { o=-1; c[j]=10 + c[j]; } } //Избавляемся от ведущих нулей while(c[0]==0) { for(j=0; j<n-1; j++) c[j]=c[j+1]; if(n!=1) n--; else break; } while(b[0]==0) { for(j=0; j<m-1; j++) b[j]=b[j+1]; if(m!=1) m--; else break; } //Вывод результата for(i=0; i<n; i++) a[i] = c[i]; }
|
Умножение: | Код | #include <stdio.h> #include <string.h> #include <stdlib.h>
void vvod(char *ar, int &n); void umnogenie(char a[], int &n, char b[], int m);
int main() { char a[1000],b[1000]; int i,na,nb; printf("“¬*®¦Ґ*ЁҐ\n\n"); // Инициализация vvod(a, na); vvod(b, nb); // Сложение umnogenie(a,na,b,nb); // Вывод ответа printf("ЋвўҐв: "); for(i=0; i<na; i++) printf("%d",a[i]); // Пауза printf("\n\n"); system("PAUSE"); return 0; } //Ввод данных void vvod(char *ar, int &n) { int i=0; printf("‚ўҐ¤ЁвҐ зЁб«®: "); ar[i]=getchar(); while(ar[i]!='\n') { ar[i]-=48; i++; ar[i]=getchar(); } n=i; printf("\n"); } // Умножение void umnogenie(char a[], int &n, char b[], int m) { char c[1000]; int i,j,l,o; //Обнуляем резултат for(i=0; i<n+m; i++) c[i]=0; //Умножение for(i=0; i<m; i++) { o=0; l=0; for(j=n-1; j>=0; j--) { c[j+m-i]+=(a[j]*b[m-1-i] + o)%10; if(c[j+m-i]>9) { l=c[j+m-i]/10; c[j+m-i]=c[j+m-i]%10; } o=(a[j]*b[m-i-1] + o)/10+l; if(j==0) c[j+m-1-i]+=o; l=0; } } //Избавляемся от ведущих нулей n=n+m; while(c[0]==0) { for(j=0; j<n-1; j++) c[j]=c[j+1]; if(n!=1) n--; else break; } //Вывод результата for(i=0; i<n; i++) a[i] = c[i]; }
|
Деление: | Код | #include <stdio.h> #include <stdlib.h>
void vvod(char *ar, int &n); bool bolshe(char a[], int na, char b[], int nb); bool ravno(char a[], int na, char b[], int nb); void pervl(char a[], int na, char b[], int nb, char l[], int &nl); void nol(char *ar, int &m, int n); void vichitanie(char a[], int &n, char b[], int &m);
int main() { char a[1000], // Делимое b[1000], // Делитель c[1000], // Частное m[1000], // Вычитаемое l[1000]; // Остаток int na,nb,nc,nm,nl; // Число цифр int i,j,start; printf("„Ґ«Ґ*ЁҐ\n\n"); // Инициализация vvod(a,na); printf("/\n\n"); vvod(b,nb); nc = 0; c[0] = 0; // В случае деления на большее число // Первая цифра pervl(a,na,b,nb,l,nl); for (i=0; i<nb; i++) m[i] = b[i]; nm = nb; start = nl; if (!(ravno(l,nl,a,na) && bolshe(b,nb,a,na))) { for (i=0; bolshe(l,nl,m,nm) || ravno(l,nl,m,nm); i++) vichitanie(l,nl,m,nm); c[nc] = i; } nc++; // Следуущие цифры for (i=start; i<na; i++) { l[nl] = a[i]; nl++; while(l[0]==0) { for(j=0; j<nl-1; j++) l[j]=l[j+1]; if(nl!=1) nl--; else break; } for (j=0; bolshe(l,nl,m,nm) || ravno(l,nl,m,nm); j++) vichitanie(l,nl,m,nm); c[nc] = j; nc++; } // Ответ printf("ЋвўҐв: "); for (i=0; i<nc; i++) printf("%d",c[i]); printf("\n"); printf("Ћбв*в®Є: "); for (i=0; i<nl; i++) printf("%d",l[i]); // Пауза printf("\n\n"); system("PAUSE"); return 0; } // ---------------------------------------------------------------------------- //Ввод данных void vvod(char *ar, int &n) { int i=0; printf("‚ўҐ¤ЁвҐ зЁб«®: "); ar[i]=getchar(); while(ar[i]!='\n') { ar[i]-=48; i++; ar[i]=getchar(); } n=i; printf("\n"); } // Больше bool bolshe(char a[], int na, char b[], int nb) { int i; if (na>nb) return true; else if (nb>na) return false; else for (i=0; i<na; i++) if (a[i]>b[i]) return true; else if (b[i]>a[i]) return false; return false; } // Равно bool ravno(char a[], int na, char b[], int nb) { int i; if (na!=nb) return false; else for (i=0; i<na; i++) if (a[i]!=b[i]) return false; return true; } // Первое вычитаемое void pervl(char a[], int na, char b[], int nb, char l[], int &nl) { int i; if (bolshe(b,nb,a,na)) { for (i=0; i<na; i++) l[i] = a[i]; nl = na; } else { for (i=0; i<nb; i++) l[i] = a[i]; nl = nb; if (bolshe(b,nb,l,nl)) { l[nl] = a[nl]; nl++; } } } // Дополняем нулями void nol(char *ar, int &m, int n) { int i,j; for(i=0; i<n-m; i++) for(j=n-1; j>0; j--) ar[j]=ar[j-1]; for(i=0; i<n-m; i++) ar[i]=0; m=n; } // Вычитание void vichitanie(char a[], int &n, char b[], int &m) { char c[1000]; int i,j,o; //Дополняем нулями if(n>m) nol(b,m,n); else if(n<m) nol(a,n,m); //Обнуляем резултат for(i=0; i<n; i++) c[i]=0; //Вычитание o=0; for(j=n-1; j>=0; j--) { c[j] += a[j] - b[j] + o; o=0; if(c[j]<0) { o=-1; c[j]=10 + c[j]; } } //Избавляемся от ведущих нулей while(c[0]==0) { for(j=0; j<n-1; j++) c[j]=c[j+1]; if(n!=1) n--; else break; } while(b[0]==0) { for(j=0; j<m-1; j++) b[j]=b[j+1]; if(m!=1) m--; else break; } //Вывод результата for(i=0; i<n; i++) a[i] = c[i]; }
|
|