Advertisement
Guest User

Untitled

a guest
Oct 21st, 2013
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.87 KB | None | 0 0
  1. /* Numerically Speaking */
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5.  
  6. typedef struct Big{
  7.     int len;
  8.     int num[50];
  9. };
  10.  
  11. Big number;
  12. Big letter;
  13.  
  14. Big sumn(Big *a, int n, int base)
  15. {
  16.       Big res = *a;
  17.       int pos=0;
  18.       int i=0;
  19.       res.num[pos]+=n;
  20.       for(i=0; i<=res.len; i++)
  21.       {
  22.          if(res.num[i]>base)
  23.           {        
  24.             res.num[i+1]+=res.num[i]/base;
  25.             res.num[i]%=base;
  26.           }
  27.       }  
  28.       if (res.num[res.len]>0) res.len++;
  29.       return res;
  30. }
  31.  
  32. Big multi(Big *a, int b, int base)
  33. {
  34.   Big res=*a;
  35.   int r = 0, i;
  36.   for (i=0;i<res.len || r != 0;i++)
  37.   {
  38.     res.num[i] = res.num[i] * b + r;
  39.     r = res.num[i]/base;
  40.     res.num[i]%=base;
  41.   }
  42.      if (i > res.len)
  43.     res.len = i;
  44.   return res;
  45. }
  46.  
  47. void let2num()
  48. {
  49.     for(int i=letter.len-1; i>=0; i--)
  50.     {
  51.         number=multi(&number, 26, 10);
  52.         number=sumn(&number, letter.num[i],10);
  53.         number=multi(&number, 1, 10);
  54.     }
  55. }
  56.  
  57. void num2let()
  58. {
  59.     for(int i=number.len-1; i>=0; i--)
  60.     {
  61.         letter=multi(&letter, 10, 26);
  62.         letter=sumn(&letter, number.num[i], 26);
  63.     }
  64. }
  65.  
  66.  
  67. int main()
  68. {
  69.     char buf[1024];
  70.     int x;
  71.  
  72.     while(scanf("%s", buf)==1)
  73.     {
  74.         if (!strcmp(buf, "*")) break;
  75.         if (buf[0]>='0' && buf[0]<='9')
  76.         {
  77.             number.len = strlen(buf);
  78.             for(int i=0; i<number.len; i++)
  79.             {
  80.                 number.num[i] = buf[number.len-i-1]-'0';
  81.             }
  82.             num2let();
  83.         }
  84.         else
  85.         {
  86.             letter.len = strlen(buf);
  87.             for(int i=0; i<letter.len; i++)
  88.             {
  89.                 letter.num[i] = buf[letter.len-i-1]-'a'+1;
  90.             }
  91.             number.len = 1;
  92.             let2num();
  93.         }
  94.    
  95.  
  96.         for(int i=letter.len-1; i>=0; i--)
  97.                 {
  98.                     printf("%c", ('a'+letter.num[i])-1);
  99.                 }
  100.         printf("\t");
  101.         for(int i=number.len-1; i>=0; i--)
  102.             {
  103.                 printf("%c", '0'+number.num[i]);
  104.                 if (i && (i%3==0))
  105.                 {
  106.                     printf(",");
  107.                 }
  108.             }
  109.         printf("\n");
  110.         memset(&number, 0, sizeof(Big));
  111.         memset(&letter, 0, sizeof(Big));
  112.  
  113.  
  114.     }
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement