小数変換の数

124小数点変換の数

別のバンドにバンドの数を達成することができ、プログラムを書きます。
62個の異なる数字{0-9、AZ、AZ}があります。
入力フォーマット
最初のライン入力次の行の数を表す整数。
各行は、次の3桁、第1の2値入力(十進表記)、次いで、バイナリ出力(十進表記)が含まれ、そして最終的に数は数字の間の空間によって分離され、バイナリ入力により表さ入ります。
バイナリ入力とバイナリ出力は、2-62の範囲内にあります。
(10進数)= 10、B = 11 A 、...、Z = 35、= 36、B = 37、...、Z = 61(0-9がまだ0-9を表します)。
出力フォーマット
バイナリ変換のセットごとに、プログラムの出力は、三線で構成される。
最初の行は、第1の入力は16進数(十進表記)、バイナリ入力によって表される、入力数であり、2つの数値を含んでいます。
二行目は、2つの数値が含まれ、第1の出力はバイナリ(十進表記)、入力された2値出力のデジタル表現です。
第三行は空白です。
スペースで区切って同じ行番号の中で。
サンプル入力:

8
62 2 abcdefghiz
10 16 1234567890123456789012345678901234567890
16 35 3A0C92075C0DBF3B8ACBC5F96CE3F0AD2
35 23 333YMHOUE8JPLT7OX6K9FYCQ8A
23 49 946B9AA02MI37E3D3MMJ4G7BL2F05
49 61 1VbDkSIMJL3JjRgAdlUfcaWj
61 5 dl9MDSWqwHjDnToKcsWE1S
5 10 42104444441001414401221302402201233340311104212022133030

出力例:

62 abcdefghiz
2 11011100000100010111110010010110011111001001100011010010001

10 1234567890123456789012345678901234567890
16 3A0C92075C0DBF3B8ACBC5F96CE3F0AD2

16 3A0C92075C0DBF3B8ACBC5F96CE3F0AD2
35 333YMHOUE8JPLT7OX6K9FYCQ8A

35 333YMHOUE8JPLT7OX6K9FYCQ8A
23 946B9AA02MI37E3D3MMJ4G7BL2F05

23 946B9AA02MI37E3D3MMJ4G7BL2F05
49 1VbDkSIMJL3JjRgAdlUfcaWj

49 1VbDkSIMJL3JjRgAdlUfcaWj
61 dl9MDSWqwHjDnToKcsWE1S

61 dl9MDSWqwHjDnToKcsWE1S
5 42104444441001414401221302402201233340311104212022133030

5 42104444441001414401221302402201233340311104212022133030
10 1234567890123456789012345678901234567890

1.高精度の変換

短い分割秦九韶+
[画像ダンプ外側のリンクに障害が発生し、ソース局は、直接アップロード(IMG-wWd3ZlSg-1583898444912)(下の画像を保存することが推奨され、セキュリティ・チェーン機構を有していてもよい p1.png)]
秦九韶10に変換したバイナリを使用しますシステム、例えば 12345 6 = 1 × 6 ) × 2 × 6 ) × 3 × 6 ) × 4 × 6 ) × 5 ) (12345)_6 =(((((1×6)×2×6)×3×6)×4×6)×5)
次いで短い小数点除算器10及びB進に変換します。
高精度を必要とします。
ここに画像を挿入説明

2.ショート部門

我々は、短い進数に応じて分割Aの分割を行い、各除算の余りが短いルーチンで保持します。例えば ( 413 ) 5 (413)_5 3 16進数に変換されます。 ( 11000 ) 3 (11000)_3 ここに画像を挿入説明
完成コアのコードの10行未満です。

#include<bits/stdc++.h>
using namespace std;
const int N=1010;
string sa,sb;
int a,b;
int A[N],B[N];
void solve(){
    sb.clear();
    int cnt=0,k=0,j=0;
    for(auto c : sa){
        if(c<='9'&&c>='0') A[cnt++]=c-'0';
        if(c<='Z'&&c>='A') A[cnt++]=c-'A'+10;
        if(c<='z'&&c>='a') A[cnt++]=c-'a'+36;
    }
    while(j<cnt){
        for(int i=j;i<cnt-1;++i){
            A[i+1]+=A[i]%b*a;
            A[i]/=b;
        }
        B[k++]=A[cnt-1]%b;
        A[cnt-1]/=b;
        if(j<cnt&&A[j]==0) ++j;
    }
    for(int i=k-1;i>=0;--i){
        sb+=(char)(B[k-i-1]<=9?B[k-i-1]+'0':(B[k-i-1]<=35?B[k-i-1]-10+'A':B[k-i-1]-36+'a'));
    }
    reverse(sb.begin(),sb.end());
    j=0;
    while(sb[j]=='0'&&j<k-1) ++j;
    cout<<a<<" "<<sa<<'\n';
    cout<<b<<" ";
    for(j;j<k;++j)
        cout<<sb[j];
    cout<<'\n'<<'\n';
}
int main(){
    int T;
    cin>>T;
    while(T--){
        cin>>a>>b;
        cin>>sa;
        solve();
    }
}
公開された96元の記事 ウォン称賛11 ビュー2251

おすすめ

転載: blog.csdn.net/weixin_43769146/article/details/104793354