zoukankan      html  css  js  c++  java
  • 洛谷 P1604 B进制星球 高精度多进制加法

    P1604 B进制星球

    • 时空限制1s / 128MB

    题目背景

    进制题目,而且还是个计算器~~

    题目描述

    话说有一天,小Z乘坐宇宙飞船,飞到一个美丽的星球。因为历史的原因,科技在这个美丽的星球上并不很发达,星球上人们普遍采用B(2<=B<=36)进制计数。星球上的人们用美味的食物招待了小Z,作为回报,小Z希望送一个能够完成B进制加法的计算器给他们。 现在小Z希望你可以帮助他,编写实现B进制加法的程序。

    输入输出格式

    输入格式:

    共3行第1行:一个十进制的整数,表示进制B。第2-3行:每行一个B进制数正整数。数字的每一位属于{0,1,2,3,4,5,6,7,8,9,A,B……},每个数字长度<=2000位。

    输出格式:

    一个B进制数,表示输入的两个数的和。

    输入输出样例

    输入样例#1:
    4
    123
    321
    
    输出样例#1:
    1110

    说明

    进制计算器

    ------------------------------------------------------------------------------------------------------

    套路依旧是那个套路,只是模数和除数变了而已

    AC代码:

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<iostream>
     4 #define maxn 2333
     5 using namespace std;
     6 struct BigNum{
     7     int s[maxn],len;
     8     BigNum(){len=1;memset(s,0,sizeof(s));}
     9 };
    10 BigNum a,b,c;
    11 int n;
    12 char ai[maxn],bi[maxn];
    13 void add(BigNum*,BigNum*,BigNum*);
    14 int main(){
    15     scanf("%d",&n);
    16     scanf(" %s %s",ai,bi);
    17     a.len=strlen(ai);
    18     b.len=strlen(bi);
    19     for(int i=a.len-1;i>=0;i--)
    20        if('0'<=ai[i]&&ai[i]<='9') a.s[a.len-i]=ai[i]-48;
    21        else a.s[a.len-i]=ai[i]-'A'+10;
    22     for(int i=b.len-1;i>=0;i--)
    23        if('0'<=bi[i]&&bi[i]<='9') b.s[b.len-i]=bi[i]-48;
    24        else b.s[b.len-i]=bi[i]-'A'+10;
    25     add(&a,&b,&c);
    26     for(int i=c.len;i>0;i--)
    27        if(0<=c.s[i]&&c.s[i]<=9) printf("%d",c.s[i]);
    28        else printf("%c",'A'+c.s[i]-10);
    29     return 0;
    30 }
    31 void add(BigNum *x,BigNum *y,BigNum *z){
    32     z->len=max(x->len,y->len);
    33     for(int i=1;i<=z->len;i++){
    34         z->s[i]+=x->s[i]+y->s[i];
    35         z->s[i+1]=z->s[i]/n;
    36         z->s[i]%=n;
    37     }
    38     if(z->s[z->len+1]) z->len++;
    39 }
    高精度进制加法
  • 相关阅读:
    统计任意字符串中字符出现次数,利用HashMap实现
    常用控件的使用方法
    Opencv读取图片和视频
    复制文件夹(多级递归)
    将指定文件中的数据存入集合中
    将集合中的学生对象输出到指定文件中
    利用缓冲字符输入流读取学生姓名名单实现点名
    字符流中的编码和解码分析
    字节缓冲流和基本字节流读取文件(一个字节读取,一个字节数组读取)
    路径中““、“/“的区别
  • 原文地址:https://www.cnblogs.com/lpl-bys/p/7785053.html
Copyright © 2011-2022 走看看