申請SAE

如果您發現本博客的外觀很難看,那是因為部分外觀文件被中國.國家.防火.牆屏.蔽所致!
請翻~牆!

我的Wordpress博客的地址: http://zhuyf.tk/

2011年10月26日 星期三

NOIP2000提高組 進制轉換 jzzh 解題報告

描述 Description
我們可以用這樣的方式來表示一個十進制數:將每個阿拉伯數字乘以一個以該數字所處位置的(值減1)爲指數,以10爲底數的冪之和的形式。例如,123可表示爲1*10^2+2*10^1+3*10^0這樣的形式。
與之相似的,對二進制數來說,也可表示成每個二進制數碼乘以一個以該數字所處位置的(值-1)爲指數,以2爲底數的冪之和的形式。一般說來,任何一個正整 數R或一個負整數-R都可以被選來作爲一個數制系統的基數。如果是以R或-R爲基數,則需要用到的數碼爲0,1,....R-1。例如,當R=7時,所需 用到的數碼是0,1,2, 3,4,5和6,這與其是R或-R無關。如果作爲基數的數絕對值超過10,則爲了表示這些數碼,通常使用英文字母來表示那些大於9的數碼。例如對16進制 數來說,用A表示10,用B表示11,用C表示12,用D表示13,用E表示14,用F表示15。在負進制數中是用-R作爲基數,例如-15(+進制)相 當於110001(-2進制),
並且它可以被表示爲2的冪級數的和數:
110001=1*(-2)^5+1*(-2)^4+0*(-2)^3+0*(-2)^2+0*(-2)^1+1*(-2)^0
問題求解:
設計一個程序,讀入一個十進制數的基數和一個負進制數的基數,並將此十進制數轉換爲此負進制下的數:-R∈{-2,-3,-4,....-20}
輸入格式 Input Format
輸入文件有若干行,每行有兩個輸入數據。
第一個是十進制數N(-32768<=N<=32767); 第二個是負進制數的基數-R。
輸出格式 Output Format
輸出此負進制數及其基數,若此基數超過10,則參照16進制的方式處理。【具體請參考樣例】

樣例輸入 Sample Input
30000 -2
-20000 -7
28800 -16
-25000 -16
樣例輸出 Sample Output
30000=11011010101110000(base -2)
-20000=263526(base -7)
28800=19180(base -16)
-25000=7FB8(base -16)

【分析+代碼】
比較基礎的題,只要注意整除函數即可。

以下代碼是BYVoid(www.byvoid.com)大牛的,他的代碼真是精練!
#include <iostream>
#include <cstdio>
using namespace std;
int N,M,base;

inline int Div(int a,int b)
{
    int n;
    n=a/b;
    if (n*b<=a)
        return n;
    return n+1;
}

void work()
{
    int num[100];
    int top=0;
    if(N==0)
    {
        cout<<0;
    }
    int P;
    while (N)
    {
        P=Div(N,base);
        num[++top]=N-P*base;
        N=P;
    }
    for (;top>=1;top--)
    {
        if (num[top]<10)
            cout<<num[top];
        if (num[top]>=10)
            cout<<(char)(num[top]-10+'A');
    }
        cout<<"(base "<<base<<")"<<endl;
}

int main()
{
    freopen("fjz.in","r",stdin);
    freopen("fjz.out","w",stdout);
    while(cin>>N)
    {
        cin>>base;
        M=N;
        cout<<N<<"=";
        work();
    }
    return 0;
}


正在连接评测机...

已连接到评测机
GRID 1
名称 Flitty
系统版本 1.00
备注 COGS 1号评测机 Flitty
正在编译...
编译成功

测试点 结果 得分 运行时间 内存使用 退出代码
1 正确 10 0.000 s 273 KB 0
2 正确 10 0.000 s 273 KB 0
3 正确 10 0.000 s 273 KB 0
4 正确 10 0.000 s 273 KB 0
5 正确 10 0.000 s 273 KB 0
6 正确 10 0.000 s 273 KB 0
7 正确 10 0.000 s 273 KB 0
8 正确 10 0.000 s 273 KB 0
9 正确 10 0.000 s 273 KB 0
10 正确 10 0.000 s 273 KB 0
运行完成
运行时间 0.003 s
平均内存使用 273 KB
测试点通过状况 AAAAAAAAAA
得分:100
恭喜你通过了全部测试点!


沒有留言:

張貼留言