24h購物| | PChome| 登入
2009-08-19 22:19:45| 人氣359| 回應0 | 上一篇 | 下一篇

挑戰極限 Part4 - 大數進制

推薦 0 收藏 0 轉貼0 訂閱站台

作法 : 半大數 

由於N是一個小數

所以/跟% 用陣列就可以解決了

詳情請參考以下...

千萬進制加快速度 * 第二程式碼

/**********************************************************/

#include<stdio.h>  
#include<stdlib.h>  
#include<string.h>  
main()  
{  
  char s[252];
  int n;
 while(scanf("%s %d",s,&n)==2)  
    {  
      int line[252]={0},m=strlen(s),a,b,c;
      int change[1000]={0};
      for(a=0,b=m-1;a<m;a++,b--)
         line[a]=s[b]-48;
      for(a=0;a<1000;a++)
         {
            int temp[252]={0},find=0;
            for(b=m-1;b>=0;b--)
               {
                 temp[b]=(line[b]+line[b+1]*10)/n;
                 line[b]=(line[b]+line[b+1]*10)%n;
               }
            change[a]=line[0];
            for(b=m-1;b>=0;b--) 
              {
              if(temp[b]!=0) find=1;
              line[b]=temp[b];
              }
            if(find==0) break;
            if(temp[m-1]==0) m--;
         }
       for(;a>=0;a--)
          if(change[a]!=0)
             {
                  for(;a>=0;a--)
                         if(change[a]<10)  putchar(change[a]+48);
                         else  putchar(change[a]-10+'A');
                   break;
            }
       printf("\n");
    }  
 return 0;  

/*********************************************************/

#include<stdio.h>  
#include<stdlib.h>  
#include<string.h>  
main()  
{  
  char s[252];
  int n;
 while(scanf("%s %d",s,&n)==2)  
    {  
      int line[252]={0},m=strlen(s),a,b,c;
      int change[900]={0},st=0,g=1;
      for(a=0,b=m-1;a<m;a++,b--)
         {
          if(a%8==0&&a!=0) {st++;g=1;}
          line[st]+=(s[b]-48)*g;
          g=g*10;
         }
         m=st+1;
      for(a=0;a<900;a++)
         {
            int temp[252]={0},find=0;
            for(b=m-1;b>=0;b--)
               {
                 temp[b]=(line[b]+line[b+1]*100000000)/n;
                 line[b]=(line[b]+line[b+1]*100000000)%n;
               }
            change[a]=line[0];
            for(b=m-1;b>=0;b--) 
              line[b]=temp[b];
            if(temp[m-1]==0) m--;
            if(m<0) break;
         }
       for(;a>=0;a--)
          if(change[a]!=0)
             {
                  for(;a>=0;a--)
                         if(change[a]<10)  putchar(change[a]+48);
                         else  putchar(change[a]-10+'A');
                   break;
            }
       printf("\n");
    }  
 return 0;  

台長: 來源不明
人氣(359) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: ZeroJudge 基礎+原創題庫 |
此分類下一篇:讀取練習——強大的加法!
此分類上一篇:相鄰矩陣 v.s.稀疏矩陣

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文