链接:传送门

思路:高精度水题


/*************************************************************************> 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( 高精度加法水 )相关推荐

  1. hdu 1047 Integer Inquiry

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1047 Integer Inquiry Description One of the first use ...

  2. HDOJ 1047 Integer Inquiry

    JAVA睑板.... Integer Inquiry Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Ja ...

  3. HDU 1042 N!( 高精度乘法水 )

    链接:传送门 思路:高精度乘法板子题,高精度耗时又耗空间...... /**************************************************************** ...

  4. 试解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 ...

  5. 蓝桥杯-阶乘运算和高精度加法(Java)

    蓝桥杯-阶乘运算和高精度加法(Java) 因为我感觉这两种题型都是对高精度的考察,都可以用数组代替整形进行数字运算,所以我把这两种题型放在一起了. 阶乘运算 先看一下题目 解这种题目目前我知道的有两种 ...

  6. 基础练习 高精度加法

    基础练习 高精度加法 时间限制:1.0s 内存限制:512.0MB 问题描述 输入两个整数a和b,输出这两个整数的和.a和b都不超过100位. 算法描述 由于a和b都比较大,所以不能直接使用语言中的标 ...

  7. 用C++的类重载高精度加法,乘法和等于符号

    运行结果: 代码如下: #include<iostream> #include<algorithm> #include<string.h> #include< ...

  8. PAT甲级1024 Palindromic Number:[C++题解]回文串和高精度加法

    文章目录 题目分析 题目链接 题目分析 一个判断是否是回文数的函数:check,思路是使用双指针从两端分别往里走. 另一个是高精度加法函数add,传入两个vector. 另外,vector逆序构造可以 ...

  9. PAT甲级1023 Have Fun with Numbers:[C++题解]高精度加法和两个vector大小比较

    文章目录 题目分析 题目链接 题目分析 使用高精度加法高精度加法板子求 这个数的两倍,存在一个vector中. 所谓高精度就是使用string来存大的数,然后模拟列竖式加法,结果一位一位压入数组vec ...

最新文章

  1. 重新分区_完全不需要装软件!教你轻松调整硬盘分区
  2. html5混合编写,Html5混合开发环境的搭建
  3. JUnit4用法详解
  4. linux 解决man命令输出到文档打开乱码问题
  5. 【C++】 C++标准模板库(六) Queue
  6. 不信不能雷倒你!超牛高考作文
  7. linux 变量的继承,solaris移植到linux的大坑:bash和sh中环境变量继承的差异
  8. php前台输出繁体,利用PHP输出控制功能做简繁体转换_php
  9. 游戏策划:为什么我的儿子不沉迷游戏?
  10. Excel VBA 中有关使用 UBound + CurrentRegion 提示类型不匹配的问题及解决方案
  11. 使用Adobe XD低版本打开高版本文件
  12. Python--小游戏俄罗斯方块
  13. 十万条评论告诉你《流浪地球》的1星都是谁打的?
  14. 山东省计算机考试模拟,山东省高校计算机等级考试VB考试模拟系统使用说明
  15. Spring Boot缓存实战 EhCache
  16. hautoj1262: 魔法宝石
  17. java线程(16)——死锁讲解,白雪公主与灰姑娘抢口红和镜子的案例
  18. css宋体代码_css 字体颜色(css color)
  19. java毕业设计——基于java+Java Swing+jsp的企业快信系统设计与实现(毕业论文+程序源码)——企业快信系统
  20. 【程序人生】阿里大牛专访丨星罡:因为期待_你需要更出色!

热门文章

  1. 「时事点评」我有一个预感,保时捷女车主丈夫要残了!
  2. 「机器学习速成」分类,评估指标(TP、FP、TN、FN),ROC曲线和AUC
  3. 卷积神经网络鼻祖LeNet网络分析
  4. 神经网络的叛离:32年前从心理学与生理学分离的瞬间
  5. 阿里云总裁胡晓明:“这些新杭州故事,明天将会在更多城市发生”
  6. 吴恩达机器学习笔记 —— 16 异常点检测
  7. 一文概览深度学习中的五大正则化方法和七大优化策略
  8. 未来,中国空间站将成为怎样的“太空科研站”?
  9. 2022年科学突破奖,9人共获奖金1500万美元,mRNA 新冠疫苗2位奠基人获奖
  10. 深度学习中的3个秘密:集成、知识蒸馏和蒸馏