程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 題目1130: 數制轉換

題目1130: 數制轉換

編輯:C++入門知識

題目描述 求任意兩個不同進制非負整數的轉換(2進制~16進制),所給整數在long所能表達的范圍之內。 不同進制的表示符號為(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。         輸入 輸入只有一行,包含三個整數a,n,b。a表示其後的n 是a進制整數,b表示欲將a進制整數n轉換成b進制整數。a,b是十進制整數,2 =< a,b <= 16。         輸出 可能有多組測試數據,對於每組數據,輸出包含一行,該行有一個整數為轉換後的b進制數。輸出時字母符號全部用大寫表示,即(0,1,...,9,A,B,...,F)。         樣例輸入 4 123 10    樣例輸出 27    提示 [+] *** 提示已隱藏,點擊上方 [+] 可顯示 ***       來源 2008年北京大學圖形實驗室計算機研究生機試真題       【思路】      \               [cpp]  /*********************************  *   日期:2013-2-19  *   作者:SJF0115  *   題號: 天勤OJ 題目1130: 數制轉換  *   來源:http://acmclub.com/problem.php?id=1130  *   結果:AC  *   來源:2008年北京大學圖形實驗室計算機研究生機試真題  *   總結:  **********************************/   #include <string.h>    #include <stdio.h>       char str[1001];   char ans[1001];   /*  * 轉換為十進制  *  str是a進制數字  */   long long int ToD(int a){       int c,len,i;       long long int sum,w;       len = strlen(str);       //轉換為十進制的數字        sum = 0;       //權值        w = 1;       //從低位到高位遍歷每一個數字         for(i = len-1;i >= 0;i--){            //0 - 9            if(str[i] >= '0' && str[i] <= '9'){               c = str[i] - '0';           }           //A - F            else if(str[i] >= 'A' && str[i] <= 'F'){               c = str[i] - 'A' + 10;           }           //a - f            else{               c = str[i] - 'a' + 10;           }           //累加該位數字和該位數字的權值的積            sum  +=  c * w;           //進制權值            w *= a;        }       return sum;   }   /*  * 十進制數字num轉換為b進制數字,並用ans存儲  */   int ToAny(long long int num,int b){       int index = 0,c;       do{           //計算該位數字            c = num % b;           //將數字轉換為字符            ans[index++] = (c < 10) ? (c + '0') : (c - 10 + 'A') ;           num /= b;       }while(num);       return index;   }   int main()   {       long long int c;       int len,a,b,i;       while(scanf("%d %s %d",&a,str,&b) != EOF){           //轉換為十進制            c = ToD(a);           //轉換為b進制            len = ToAny(c,b);           //輸出            for(i = len-1;i >= 0;i--){               printf("%c",ans[i]);           }           printf("\n");       }       return 0;   }     /********************************* *   日期:2013-2-19 *   作者:SJF0115 *   題號: 天勤OJ 題目1130: 數制轉換 *   來源:http://acmclub.com/problem.php?id=1130 *   結果:AC *   來源:2008年北京大學圖形實驗室計算機研究生機試真題 *   總結: **********************************/ #include <string.h> #include <stdio.h>   char str[1001]; char ans[1001]; /* * 轉換為十進制 *  str是a進制數字 */ long long int ToD(int a){     int c,len,i;     long long int sum,w;     len = strlen(str);     //轉換為十進制的數字     sum = 0;     //權值     w = 1;     //從低位到高位遍歷每一個數字      for(i = len-1;i >= 0;i--){          //0 - 9         if(str[i] >= '0' && str[i] <= '9'){             c = str[i] - '0';         } //A - F         else if(str[i] >= 'A' && str[i] <= 'F'){             c = str[i] - 'A' + 10;         } //a - f         else{             c = str[i] - 'a' + 10;         } //累加該位數字和該位數字的權值的積         sum  +=  c * w; //進制權值         w *= a;      }     return sum; } /* * 十進制數字num轉換為b進制數字,並用ans存儲 */ int ToAny(long long int num,int b){     int index = 0,c;     do{         //計算該位數字         c = num % b;         //將數字轉換為字符         ans[index++] = (c < 10) ? (c + '0') : (c - 10 + 'A') ;         num /= b;     }while(num);     return index; } int main() { long long int c;     int len,a,b,i; while(scanf("%d %s %d",&a,str,&b) != EOF){ //轉換為十進制         c = ToD(a); //轉換為b進制         len = ToAny(c,b); //輸出         for(i = len-1;i >= 0;i--){             printf("%c",ans[i]);         }         printf("\n"); }     return 0; }    

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