程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 九度OJ 教程62 大數處理之《進制轉換》

九度OJ 教程62 大數處理之《進制轉換》

編輯:C++入門知識

  [cpp]   //九度OJ 教程62 大數處理之《進制轉換》   //http://ac.jobdu.com/problem.php?cid=1040&pid=61   #include<stdio.h>   #include<string.h>   #define MAXS 3000   typedef struct E{       int num[MAXS];//num[0]放個位,依次往右排。       int quan;       int lenth;   }E;   E spa;//這在main函數中,被置空。目的是為了置空其他大數的時候,可以直接令其=spa,省些事。   int stack[MAXS];   int count;   E mul(int k,E x)//返回整數k與大數x的乘積   {       int l=x.lenth,i;       for(i=0;i<=l;i++)x.num[i]*=k;       for(i=0;i<=l;i++)       {           x.num[i+2]+=x.num[i]/100;           x.num[i+1]+=x.num[i]/10%10;           x.num[i]%=10;       }       for(x.lenth+=2;x.num[x.lenth]==0;x.lenth--);       return x;   }   E add(E x,E y)//返回大數x與大數y的和。   {       int i;       if(x.lenth<y.lenth){E temp=x;x=y;y=temp;}       for(i=0;i<=y.lenth;i++)       {           x.num[i]+=y.num[i];       }       for(i=0;i<=x.lenth;i++)       {           x.num[i+1]+=x.num[i]/10;           x.num[i]%=10;       }       for(x.lenth+=2;x.num[x.lenth]==0;x.lenth--);       return x;   }   E changeten(E sorce)//函數作用:處理ak這個大數與n這個整形數的乘積。   {       E quan=spa,temp,ten=spa;       int i;       quan.num[0]=sorce.quan%10;       if(sorce.quan>=10)       {           quan.num[1]=sorce.quan/10;           quan.lenth=1;       }       ten.num[0]=sorce.num[0]%10;       ten.num[1]=sorce.num[0]/10;       ten.lenth=(ten.num[1]!=0);       for(i=1;i<=sorce.lenth;i++)       {           temp=mul(sorce.num[i],quan);           ten=add(ten,temp);           quan=mul(sorce.quan,quan);       }       return ten;   }   void divv(E sorce,int k)   {       int i;       count=0;       while(sorce.lenth)       {           for(i=sorce.lenth;i;i--)           {               sorce.num[i-1]+=(sorce.num[i]%k)*10;//標記一下……回頭試一下,是不是把這裡的10改成sorce的權值,就可以直接不用轉化成10進制再求了?               sorce.num[i]/=k;           }           stack[count++]=sorce.num[0]%k;           sorce.num[0]/=k;           for(;sorce.num[sorce.lenth]==0&&sorce.lenth;sorce.lenth--);       }       while(sorce.num[0])       {           stack[count++]=sorce.num[0]%k;           sorce.num[0]/=k;       }   }   int main()   {       int i,j,l,b_quan;       char ha[MAXS];       for(i=spa.lenth=0;i<MAXS;i++)spa.num[i]=0;       E a=spa,ten=spa;       while(~scanf("%d",&a.quan))       {           scanf("%d",&b_quan);           scanf("%s",ha);           a.lenth=l=strlen(ha)-1;           if(l==0&&ha[0]=='0'){printf("0\n");continue;}           for(i=0,j=l;i<j;i++,j--){char tempc=ha[i];ha[i]=ha[j];ha[j]=tempc;}           for(i=0;i<=l;i++)           {               if(ha[i]<='9'&&ha[i]>='0')a.num[i]=ha[i]-'0';               else a.num[i]=ha[i]-'A'+10;           }   
www.2cto.com
n(a);           divv(ten,b_quan);           for(i=count-1;i>=0;i--)           {               if(stack[i]<10)printf("%d",stack[i]);               else printf("%c",stack[i]-10+'a');           }           printf("\n");       }       return 0;   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved