Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Numerically Speaking */
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- typedef struct Big{
- int len;
- int num[50];
- };
- Big number;
- Big letter;
- Big sumn(Big *a, int n, int base)
- {
- Big res = *a;
- int pos=0;
- int i=0;
- res.num[pos]+=n;
- for(i=0; i<=res.len; i++)
- {
- if(res.num[i]>base)
- {
- res.num[i+1]+=res.num[i]/base;
- res.num[i]%=base;
- }
- }
- if (res.num[res.len]>0) res.len++;
- return res;
- }
- Big multi(Big *a, int b, int base)
- {
- Big res=*a;
- int r = 0, i;
- for (i=0;i<res.len || r != 0;i++)
- {
- res.num[i] = res.num[i] * b + r;
- r = res.num[i]/base;
- res.num[i]%=base;
- }
- if (i > res.len)
- res.len = i;
- return res;
- }
- void let2num()
- {
- for(int i=letter.len-1; i>=0; i--)
- {
- number=multi(&number, 26, 10);
- number=sumn(&number, letter.num[i],10);
- number=multi(&number, 1, 10);
- }
- }
- void num2let()
- {
- for(int i=number.len-1; i>=0; i--)
- {
- letter=multi(&letter, 10, 26);
- letter=sumn(&letter, number.num[i], 26);
- }
- }
- int main()
- {
- char buf[1024];
- int x;
- while(scanf("%s", buf)==1)
- {
- if (!strcmp(buf, "*")) break;
- if (buf[0]>='0' && buf[0]<='9')
- {
- number.len = strlen(buf);
- for(int i=0; i<number.len; i++)
- {
- number.num[i] = buf[number.len-i-1]-'0';
- }
- num2let();
- }
- else
- {
- letter.len = strlen(buf);
- for(int i=0; i<letter.len; i++)
- {
- letter.num[i] = buf[letter.len-i-1]-'a'+1;
- }
- number.len = 1;
- let2num();
- }
- for(int i=letter.len-1; i>=0; i--)
- {
- printf("%c", ('a'+letter.num[i])-1);
- }
- printf("\t");
- for(int i=number.len-1; i>=0; i--)
- {
- printf("%c", '0'+number.num[i]);
- if (i && (i%3==0))
- {
- printf(",");
- }
- }
- printf("\n");
- memset(&number, 0, sizeof(Big));
- memset(&letter, 0, sizeof(Big));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement