2009-01-24 22:05:32來源不明
ACM 389 Basically Speaking
先換成10進位的數字,再利用陣列去跑進位的部分。
/************************************************************/
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- main()
- {
- int a,b,c,n,m;
- char x[20];
- while(scanf("%s %d %d",x,&n,&m)==3)
- {
- /*n是現在的 m是要轉換的*/
- int temp=1,sum=0,y[50]={0};
- for(a=strlen(x)-1;a>=0;a--)
- {
- if(x[a]>='A')
- sum=sum+temp*(x[a]-55);
- else
- sum=sum+temp*(x[a]-48);
- temp=temp*n;
- }
- y[0]=sum;
- for(a=0;a<50;a++)
- {
- if(y[a]>=m)
- {
- y[a+1]=y[a+1]+y[a]/m;
- y[a]=y[a]%m;
- }
- }
- for(a=49;a>=0;a--)
- {
- if(y[a]!=0)
- {
- if(a>=7)
- {
- printf(" ERROR");
- break;
- }
- else
- {
- for(c=0;c<7-a;c++)
- printf(" ");
- for(b=a;b>=0;b--)
- {
- switch(y[b])
- {
- case 10:printf("A");break;
- case 11:printf("B");break;
- case 12:printf("C");break;
- case 13:printf("D");break;
- case 14:printf("E");break;
- case 15:printf("F");break;
- default:printf("%d",y[b]);
- }
- }
- break;
- }
- }
- }
- printf("\n");
- }
- return 0;
- }