Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <string.h>
- const int N=100;
- const int p=10;
- void minus(char a[]) {
- for (int i=0;i<N;i++)
- a[i]=(p-1)-a[i];
- for (int i=0;i<N;i++)
- if (a[i]==p-1)
- a[i]=0;
- else
- {
- a[i]++;
- break;
- }
- }
- void input(char a[]){
- char s[N+2];
- scanf("%s", s);
- int sign, i=0;
- if (s[0]=='-' || s[0]=='+') {
- sign=(s[0]=='-' ? -1 : 1);
- i=1;
- }
- int is=strlen(s)-1, ia=0;
- for (;is>=i;--is)
- a[ia++]=s[is]-'0';
- for (;ia<N;++ia)
- a[ia]=0;
- if (sign==-1)
- minus(a);
- }
- void output(char a[]) {
- int sign=1;
- if (a[N-1]>=p/2) {
- sign=-1;
- printf("-");
- minus(a);
- }
- int i=N-1;
- for (;i>0;i--)
- if (a[i])
- break;
- for (;i>=0;--i)
- printf("%i",a[i]);
- if (sign==-1)
- minus(a);
- }
- void add(char c[], char a[], char b[])
- {//c=a+b
- for (int i=0;i<N;i++)
- c[i]=0;
- for (int i=0;i<N;i++)
- {
- int tmp=a[i]+b[i]+c[i];
- c[i]=tmp%p;
- c[i+1]=tmp/p;
- }
- }
- void sub(char c[], char a[], char b[]) //c=a-b=a+(-b)
- {
- minus(b);
- add(c,a,b);
- minus(b);
- }
- void decrease(char a[], char b[]) //a=a-b
- {
- char c[N+1];
- sub(c,a,b);
- for (int i=0;i<N;i++)
- a[i]=c[i];
- }
- void mul(char c[], char a[], char b[]) //c=a*b
- {
- for (int i=0;i<N;i++)
- c[i]=0;
- for (int i=0;i<N;i++)
- for (int j=0;i+j<N;j++)
- {
- int tmp=a[i]*b[j]+c[i+j];
- c[i+j]=tmp%p; //в текущую пишем остаток
- c[i+j+1]+=tmp/p; //в следующую div
- }
- }
- void div(char c[], char a[], char b[]) {//c=a/b
- char d[N],k[N];
- for (int i=0;i<N;i++){
- c[i]=0;
- k[i]=0;
- d[i]=a[i];
- }
- k[0]++;
- int sign = 1;
- if(d[N-1]>=p/2){
- sign*=-1;
- minus(d);
- }
- if(b[N-1]>=p/2){
- sign*=-1;
- minus(b);
- }
- while(1){
- decrease(d,b);
- if(d[N-1]>=p/2)
- break;
- else{
- for (int i=0;i<N;i++)
- {
- int tmp=k[i]+c[i];
- c[i]=tmp%p;
- c[i+1]=tmp/p;
- }
- }
- if(sign = -1)
- minus(c);
- }
- int cmp(char a[], char b[])
- {
- int i=N-1;
- for (;i>0;i--)
- if (a[i])
- break; //ищем первый не ноль
- for (;i>=0;--i)
- if (a[i]>b[i])
- return 1;
- else if (a[i]<b[i])
- return -1;
- }
- //cmp - сравнивает числа
- //деление на два
- int _tmain(int argc, _TCHAR* argv[])
- {
- char a[N+1];
- char b[N+1];
- char c[N+1];
- input(a);
- input(b);
- mul(c,a,b);
- output(c);
- printf("%d", cmp(a,b));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement