Advertisement
Guest User

Untitled

a guest
Feb 1st, 2015
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.34 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <string.h>
  3.  
  4. const int N=100;
  5. const int p=10;
  6.  
  7. void minus(char a[]) {
  8.     for (int i=0;i<N;i++)
  9.         a[i]=(p-1)-a[i];
  10.     for (int i=0;i<N;i++)
  11.         if (a[i]==p-1)
  12.             a[i]=0;
  13.         else
  14.         {
  15.             a[i]++;
  16.             break;
  17.         }
  18. }
  19.  
  20. void input(char a[]){
  21.     char s[N+2];
  22.     scanf("%s", s);
  23.     int sign, i=0;
  24.     if (s[0]=='-' || s[0]=='+') {
  25.         sign=(s[0]=='-' ? -1 : 1);
  26.         i=1;
  27.     }
  28.     int is=strlen(s)-1, ia=0;
  29.     for (;is>=i;--is)
  30.         a[ia++]=s[is]-'0';
  31.     for (;ia<N;++ia)
  32.         a[ia]=0;
  33.     if (sign==-1)
  34.         minus(a);
  35. }
  36.  
  37. void output(char a[]) {
  38.     int sign=1;
  39.     if (a[N-1]>=p/2) {
  40.         sign=-1;
  41.         printf("-");
  42.         minus(a);
  43.     }
  44.     int i=N-1;
  45.     for (;i>0;i--)
  46.         if (a[i])
  47.             break;
  48.     for (;i>=0;--i)
  49.         printf("%i",a[i]);
  50.     if (sign==-1)
  51.         minus(a);
  52. }
  53.  
  54. void add(char c[], char a[], char b[])
  55. {//c=a+b
  56.     for (int i=0;i<N;i++)
  57.         c[i]=0;
  58.     for (int i=0;i<N;i++)
  59.     {
  60.         int tmp=a[i]+b[i]+c[i];
  61.         c[i]=tmp%p;
  62.         c[i+1]=tmp/p;
  63.     }
  64. }
  65.  
  66. void sub(char c[], char a[], char b[]) //c=a-b=a+(-b)
  67. {
  68.     minus(b);
  69.     add(c,a,b);
  70.     minus(b);
  71. }
  72.  
  73. void decrease(char a[], char b[]) //a=a-b
  74. {
  75.     char c[N+1];
  76.     sub(c,a,b);
  77.     for (int i=0;i<N;i++)
  78.         a[i]=c[i];
  79. }
  80.  
  81. void mul(char c[], char a[], char b[]) //c=a*b
  82. {
  83.     for (int i=0;i<N;i++)
  84.         c[i]=0;
  85.     for (int i=0;i<N;i++)
  86.         for (int j=0;i+j<N;j++)
  87.         {
  88.             int tmp=a[i]*b[j]+c[i+j];
  89.             c[i+j]=tmp%p; //в текущую пишем остаток
  90.             c[i+j+1]+=tmp/p; //в следующую div
  91.         }
  92. }
  93.  
  94. void div(char c[], char a[], char b[]) {//c=a/b
  95.  
  96.     char d[N],k[N];
  97.     for (int i=0;i<N;i++){
  98.         c[i]=0;
  99.         k[i]=0;
  100.         d[i]=a[i];
  101.     }
  102.     k[0]++;
  103.     int sign = 1;
  104.     if(d[N-1]>=p/2){
  105.         sign*=-1;
  106.         minus(d);
  107.     }
  108.     if(b[N-1]>=p/2){
  109.         sign*=-1;
  110.         minus(b);
  111.     }
  112.     while(1){
  113.         decrease(d,b);
  114.         if(d[N-1]>=p/2)
  115.             break;
  116.         else{
  117.                 for (int i=0;i<N;i++)
  118.     {
  119.         int tmp=k[i]+c[i];
  120.         c[i]=tmp%p;
  121.         c[i+1]=tmp/p;
  122.     }
  123.     }
  124.         if(sign = -1)
  125.             minus(c);
  126. }
  127.  
  128. int cmp(char a[], char b[])
  129. {
  130.     int i=N-1;
  131.     for (;i>0;i--)
  132.         if (a[i])
  133.             break; //ищем первый не ноль
  134.     for (;i>=0;--i)
  135.         if (a[i]>b[i])
  136.             return 1;
  137.         else if (a[i]<b[i])
  138.             return -1;
  139.  
  140. }
  141. //cmp - сравнивает числа
  142. //деление на два
  143.  
  144. int _tmain(int argc, _TCHAR* argv[])
  145. {
  146.     char a[N+1];
  147.     char b[N+1];
  148.     char c[N+1];
  149.     input(a);
  150.     input(b);
  151.     mul(c,a,b);
  152.     output(c);
  153.     printf("%d", cmp(a,b));
  154.     return 0;
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement