HDU 1047 Integer Inquiry( 高精度加法水 )
链接:传送门
思路:高精度水题
/*************************************************************************> File Name: hdu1047.cpp> Author: WArobot > Blog: http://www.cnblogs.com/WArobot/ > Created Time: 2017年05月16日 星期二 21时16分38秒************************************************************************/#include<bits/stdc++.h>
using namespace std;#define cls(x) memset(x,0,sizeof(x))const int maxlen = 100000; // 单个“数字”最大长度
class HP{ // High Precision
public:int len , s[maxlen]; HP(){ (*this) = 0; }; HP(int inte){ (*this) = inte; }; HP(const char*str){ (*this) = str; };friend ostream & operator << (ostream & cout , const HP &x); // 定义高精度输出方式HP operator = (int inte); HP operator = (const char*str); // 定义高精度与高精度的 + - * / % Compare(比较)HP operator + (const HP &b); HP operator - (const HP &b);HP operator * (const HP &b); HP operator / (const HP &b);HP operator % (const HP &b); int Compare(const HP &b);
};
ostream & operator <<(ostream & cout, const HP &x){for(int i = x.len ; i >= 1 ; i--) cout<< x.s[i]; return cout;
}
HP HP::operator = (int inte){if( inte == 0 ){ len = 1; s[1] = 0; return (*this); };for( len = 0 ; inte > 0 ;) { s[++len] = inte % 10 ; inte /= 10; };return (*this);
}
HP HP::operator = (const char* str){len = strlen(str);for(int i = 1 ; i <= len ; i++) s[i] = str[len - i] - '0'; // 需要注意return (*this);
}
HP HP::operator * (const HP &b){int i , j; HP c; c.len = len + b.len;for( i = 1 ; i <= c.len ; i++) c.s[i] = 0; // 清空返回值的数组for( i = 1 ; i <= len ; i++) for( j = 1 ; j <= b.len ; j++) c.s[i+j-1] += s[i]*b.s[j];for( i = 1 ; i < c.len ; i++){ c.s[i+1] += c.s[i] / 10 ; c.s[i] %= 10; }while( c.s[i] ){ c.s[i+1] = c.s[i]/10 ; c.s[i] %= 10; i++; }while( i>1 && !c.s[i] ) i--; c.len = i;return c;
}
HP HP::operator + (const HP &b){ int i; HP c; c.s[1] = 0;for( i = 1 ; i<=len || i<=b.len || c.s[i] ; i++ ){ // 模拟十进制加法运算,写的好呀!写的好!巧妙!if( i <= len ) c.s[i] += s[i];if( i <= b.len ) c.s[i] += b.s[i];c.s[i+1] = c.s[i]/10; c.s[i] %= 10;}c.len = i - 1 ; if( c.len == 0 ) c.len = 1;return c;
}
HP HP::operator - (const HP &b){int i,j; HP c;for( i = 1, j = 0; i <= len ; i++){c.s[i] = s[i] - j; if(i <= b.len) c.s[i] -= b.s[i];if( c.s[i] < 0 ){ j = 1; c.s[i] += 10; } else j = 0;}c.len = len; while( c.len > 1 && !c.s[c.len] ) c.len--;return c;
}
int HP::Compare(const HP &y){if( len > y.len ) return 1;if( len < y.len ) return -1;int i = len;while( (i>1) && (s[i]==y.s[i]) ) i--;return s[i] - y.s[i]; // 如果 s[i] == y.s[i] 自然返回0,s[i] > y.s[i]返回1.....很巧妙!
}
HP HP::operator / (const HP &b){int i,j; HP d(0) , c;for( i = len ; i > 0 ; i--){if( !(d.len==1 && d.s[1]==0) ){ for( j = d.len ; j > 0 ; j--) d.s[j+1] = d.s[j]; ++d.len; }d.s[1] = s[i]; c.s[i] = 0;while( j = d.Compare(b) >= 0 ){d = d - b; c.s[i]++; if(j==0) break;}}c.len = len ; while( (c.len>1) && (c.s[c.len]==0) ) c.len--;return c;
}
HP HP::operator % (const HP &b){int i,j; HP d(0);for( i = len ; i > 0 ; i--){if( !(d.len==1 && d.s[1]==0) ){ for( j = d.len ; j > 0 ; j--) d.s[j+1] = d.s[j]; ++d.len; }d.s[1] = s[i];while( j = d.Compare(b) >= 0 ){d = d - b; if(j==0) break;}}return d;
}
int main(){int t,kase = 0;char s1[maxlen];scanf("%d",&t);while(t--){if(kase) puts("");kase++;HP ans , tmp;while(true){cls(s1);scanf("%s",s1);if( s1[0] == '0' ) break;tmp = s1;ans = ans + tmp;}cout<< ans <<endl;}return 0;
}
转载于:https://www.cnblogs.com/WArobot/p/6863761.html
HDU 1047 Integer Inquiry( 高精度加法水 )相关推荐
- hdu 1047 Integer Inquiry
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1047 Integer Inquiry Description One of the first use ...
- HDOJ 1047 Integer Inquiry
JAVA睑板.... Integer Inquiry Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
- HDU 1042 N!( 高精度乘法水 )
链接:传送门 思路:高精度乘法板子题,高精度耗时又耗空间...... /**************************************************************** ...
- 试解PTA《20211122-函数基础练习》,涉及 高精度加法 和 10进制转换成2-16进制问题,有需要的同学来看看吧;
目录 一.前言 二.例题部分 2.1.进制转换 2.1.1.题解1 2.1.2.题解2 2.2. 函数返回一个整数的反序数 (20 分) 2.2.2 题解 2.3. 大整数A+B (10 分) 2.3 ...
- 蓝桥杯-阶乘运算和高精度加法(Java)
蓝桥杯-阶乘运算和高精度加法(Java) 因为我感觉这两种题型都是对高精度的考察,都可以用数组代替整形进行数字运算,所以我把这两种题型放在一起了. 阶乘运算 先看一下题目 解这种题目目前我知道的有两种 ...
- 基础练习 高精度加法
基础练习 高精度加法 时间限制:1.0s 内存限制:512.0MB 问题描述 输入两个整数a和b,输出这两个整数的和.a和b都不超过100位. 算法描述 由于a和b都比较大,所以不能直接使用语言中的标 ...
- 用C++的类重载高精度加法,乘法和等于符号
运行结果: 代码如下: #include<iostream> #include<algorithm> #include<string.h> #include< ...
- PAT甲级1024 Palindromic Number:[C++题解]回文串和高精度加法
文章目录 题目分析 题目链接 题目分析 一个判断是否是回文数的函数:check,思路是使用双指针从两端分别往里走. 另一个是高精度加法函数add,传入两个vector. 另外,vector逆序构造可以 ...
- PAT甲级1023 Have Fun with Numbers:[C++题解]高精度加法和两个vector大小比较
文章目录 题目分析 题目链接 题目分析 使用高精度加法高精度加法板子求 这个数的两倍,存在一个vector中. 所谓高精度就是使用string来存大的数,然后模拟列竖式加法,结果一位一位压入数组vec ...
最新文章
- 重新分区_完全不需要装软件!教你轻松调整硬盘分区
- html5混合编写,Html5混合开发环境的搭建
- JUnit4用法详解
- linux 解决man命令输出到文档打开乱码问题
- 【C++】 C++标准模板库(六) Queue
- 不信不能雷倒你!超牛高考作文
- linux 变量的继承,solaris移植到linux的大坑:bash和sh中环境变量继承的差异
- php前台输出繁体,利用PHP输出控制功能做简繁体转换_php
- 游戏策划:为什么我的儿子不沉迷游戏?
- Excel VBA 中有关使用 UBound + CurrentRegion 提示类型不匹配的问题及解决方案
- 使用Adobe XD低版本打开高版本文件
- Python--小游戏俄罗斯方块
- 十万条评论告诉你《流浪地球》的1星都是谁打的?
- 山东省计算机考试模拟,山东省高校计算机等级考试VB考试模拟系统使用说明
- Spring Boot缓存实战 EhCache
- hautoj1262: 魔法宝石
- java线程(16)——死锁讲解,白雪公主与灰姑娘抢口红和镜子的案例
- css宋体代码_css 字体颜色(css color)
- java毕业设计——基于java+Java Swing+jsp的企业快信系统设计与实现(毕业论文+程序源码)——企业快信系统
- 【程序人生】阿里大牛专访丨星罡:因为期待_你需要更出色!
热门文章
- 「时事点评」我有一个预感,保时捷女车主丈夫要残了!
- 「机器学习速成」分类,评估指标(TP、FP、TN、FN),ROC曲线和AUC
- 卷积神经网络鼻祖LeNet网络分析
- 神经网络的叛离:32年前从心理学与生理学分离的瞬间
- 阿里云总裁胡晓明:“这些新杭州故事,明天将会在更多城市发生”
- 吴恩达机器学习笔记 —— 16 异常点检测
- 一文概览深度学习中的五大正则化方法和七大优化策略
- 未来,中国空间站将成为怎样的“太空科研站”?
- 2022年科学突破奖,9人共获奖金1500万美元,mRNA 新冠疫苗2位奠基人获奖
- 深度学习中的3个秘密:集成、知识蒸馏和蒸馏