FZU 1477 进制转换

进制转化

Time Limit:1s Memory limit:32M
Accepted Submit:449 Total Submit:1141

输入十进制数n(0<=n<=10000),请输出它对应的k(2<=k<=36)进制数。

10,11…分别用A, B … 代替。

输入数据

本题有多组输入数据,你必须处理到EOF为止.

每组数据占一行,有2个整数n,k

输出数据

输出n对应的k进制数,一个数一行。

输入样例

3 2
4 3
15 16

输出样例

11
11
F

Original: FOJ月赛-2007年3月

 

解题:

       用的土方法,先判定a,b是否相等,这是特殊情况。

       再取模存进数组,然后a=a/b再循环,直到a<b,最后在循环外再执行一次存储。逆序输出所需要的值。

        网上有更好的方法,用的递归,网址http://blog.csdn.net/abao_/archive/2008/07/05/2615557.aspx

        有些东西是需要深思。

 

#include <iostream> #include <stdio.h> using namespace std; const int maxArray=64; int main() { int a,b,i=0; char number[maxArray]; memset(number,'/0',maxArray); while(cin>>a>>b) { if(a==b) { cout<<a/b*10<<endl; continue; } else { for(i=0;i<maxArray && a>=b;i++) { if(a%b<10) { number[i]=a%b+48; } else { number[i]=a%b+55; } a=a/b; } if(a%b<10) { number[i]=a%b+48; } else { number[i]=a%b+55; } } for(int j=maxArray-1;j>=0;j--) { if(number[j]=='/0') continue; cout<<number[j]; } memset(number,'/0',maxArray); cout<<endl; } return 0; }

你可能感兴趣的:(FZU 1477 进制转换)