24h購物| | PChome| 登入
2009-06-14 09:54:31| 人氣884| 回應0 | 上一篇 | 下一篇

程式設計師的面試問題(二)

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

作法:進位問題

如果v為負數的話,先取補數之後再+1

例如是0001001→1110110→1110111

但是也有可能+1後需要進位,所以需要跑一次

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

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
main()
{
     
 int A,B,V;
 while(scanf("%d %d %d",&V,&A,&B)!=EOF)
    {
      int ans[32]={0},a,b;
      ans[0]=abs(V);
      for(a=0;a<=31;a++)
       if(ans[a]>=2)
         {
           ans[a+1]=ans[a]/2;
           ans[a]=ans[a]%2;
         }
       else break;
      if(V<0)
        {
         for(a=0;a<=31;a++)
          if(ans[a]==1) ans[a]=0;
          else ans[a]=1;
         ans[0]++;
         for(a=0;a<=31;a++)
         if(ans[a]>=2)
           {
             ans[a+1]=ans[a]/2;
             ans[a]=ans[a]%2;
           }
          else break;
        }
      ans[A]=B;
      for(a=31;a>=0;a--)
       printf("%d",ans[a]);
      printf("\n");  
    }
 return 0;
}

台長: 來源不明

您可能對以下文章有興趣

人氣(884) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: ZeroJudge 基礎+原創題庫 |
此分類下一篇:電腦-窮人的
此分類上一篇:抓兔子

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