• 洛谷 题解 P1604 【B进制星球】


    题目:P1604 B进制星球

    本人提交记录:R6292872

    作为一个极其无聊的人,我没事干地写了operator。。。

    思路很简单:

    读入b

    读入b进制的x,y

    ans = x + y

    输出ans

    用了operator,貌似难解释一点。

    但我认为,以大家那都高于我的智商,不会不理解高精加法。

    我只需要介绍一下一些变量和函数%%%

    全局变量 b : b进制
    struct类型 bint : b进制高精数
    bint类型 x,y,ans : x,y用于输入,ans存储答案值
    

    还要介绍一下bint类型的变量&方法orz:

    beta 存储高精数
    len 存储高精数长度
    
    bint() 初始化
    mem() 初始化,形参为初始化后每位的值
    operator + () 加法operator定义
    operator >> () 输入operator定义
    operator << () 输出operator定义
    

    最后上代码:

    #include <string.h>
    #include <iostream>
    #define MAX 2001
    using namespace std;
    
    int b;
    
    struct bint {
    	int beta[MAX];
    	int len;
    	bint()
    	{
    		mem(0);
    		len = 0;
    	}
      	void mem(int cmd)
      	{
      		memset(beta, cmd, sizeof(beta));
      	}
      	bint operator + (const bint &other) const
      	{
    		if (len == 0) return other;
    		if (other.len == 0) return *this;
    		bint ans;
    		int maxlen = len > other.len ? len : other.len;
    		for (int i = 0; i < maxlen; i++) {
    			ans.beta[i] += beta[i] + other.beta[i];
    			ans.beta[i + 1] += ans.beta[i] / b;
    			ans.beta[i] = ans.beta[i] % b;
    		}
    		if (ans.beta[maxlen] != 0) ans.len = maxlen + 1;
    		else ans.len = maxlen;
    		return ans;
      	}
      	friend istream &operator >> (istream &in, bint &other)
      	{
    		string str;
    		in >> str;
    		for (int i = 0; i < str.size(); i++) {
    			if (str[i] > '9') other.beta[str.size() - i - 1] = str[i] - 55; 
    			else other.beta[str.size() - i - 1] = str[i] - 48;
    		}
    		other.len = str.size();
      	}
      	friend ostream &operator << (ostream &out, bint &other)
      	{
    		for (int i = other.len - 1; i >= 0; i--) {
    			if (other.beta[i] > 9) out << (char)(other.beta[i] + 55); 
    			else out << (char)(other.beta[i] + 48);
    		}
      	}
    };
    
    int main()
    {
    	bint x, y, ans;
    	cin >> b;
    	cin >> x;
    	cin >> y;
    	ans = x + y;
    	cout << ans;
        return 0;
    }
    

    慢慢看。。。

  • 相关阅读:
    DLX
    逆康托展开
    康托展开
    light oj 1427(ac自动机)
    hdu 2586 (lca-RMQ)
    约瑟夫问题
    C-运算符
    C-数据
    shell-流程控制
    python编程规范-最佳实践
  • 原文地址:https://www.cnblogs.com/hkxadpall/p/9895915.html
Copyright © 2020-2023  润新知