大数题目
来源:互联网 发布:poser人体造型软件 编辑:程序博客网 时间:2024/06/04 23:19
43.Multiply Strings
Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2.
Note:
The length of both num1 and num2 is < 110.
Both num1 and num2 contains only digits 0-9.
Both num1 and num2 does not contain any leading zero.
You must not use any built-in BigInteger library or convert the inputs to integer directly.
给2个string,计算相乘的结果,其中不允许用内置的大数库或者将输入(string)转为整型。
思路:
假设是一个n位数与m位数相乘,则相乘的最大值为(10^n-1)*(10^m-1) 即10^(n+m)-10^n-10^m+1,显然最大值至多n+m位数
观察上图乘法运算过程。
得到以下代码。
class Solution {public: string multiply(string num1, string num2) { string sum(num1.size()+num2.size(),'0'); for(int i=num1.size()-1;0<=i;--i) { int carry=0; for(int j=num2.size()-1;0<=j;--j) { int tmp=(sum[i+j+1]-'0')+(num1[i]-'0')*(num2[j]-'0')+carry; sum[i+j+1]=tmp%10+'0'; carry=tmp/10; } sum[i]+=carry; } size_t x=sum.find_first_not_of("0"); if( string::npos!=x) { return sum.substr(x); } return "0" ; }};
415 Add Strings
2个string相加。。贴代码更有意思了。。
class Solution {public: string addStrings(string num1, string num2) { if (num1.size() < num2.size()) return addStrings(num2, num1); int carry = 0, i = num1.size() - 1, j = num2.size() - 1; for (; i >= 0 && (carry || j >= 0); i--, j--, carry /= 10) num1[i] = (carry += num1[i] - '0' + (j >= 0 ? num2[j] - '0' : 0)) % 10 + '0'; return (carry ? "1" : "") + num1; }};
class Solution {public: string addStrings(string num1, string num2) { int i=num1.size()-1; int j=num2.size()-1; string res(""); int carry=0; while( i>=0 || j>=0 || carry) { long sum=0; if(i>=0) {sum += (num1[i]-'0');--i;} if(j>=0) {sum += (num2[j]-'0');--j;} sum+=carry; carry=sum/10; res=res+to_string(sum%10); } reverse(res.begin(),res.end()); return res; }};
66.Plus One
给了一个vector digits,里面记录了一个整型非负数的所有位,然后让你加1后会得到啥,让你返回一个vector
跟上面那题的思路没区别。。EASY级别。
我的代码。
class Solution {public: vector<int> plusOne(vector<int>& digits) { vector<int> res; int carry=1; int i=digits.size()-1; if(i<0) { return vector<int>(1,1); } do { int tmp=digits[i]+carry; res.push_back(tmp%10); carry=tmp/10; --i; }while(i>=0); if(carry) { res.push_back(carry); } reverse(res.begin(),res.end()); return res; }};
阅读全文
1 0
- 大数题目
- 【题目24】大数乘法
- 题目28:大数阶乘
- nyoj 题目28 大数阶乘
- 题目四 大数的阶乘
- Java 大数的几道题目 nyist
- HDOJ 题目1715 大菲薄数 大数
- HDOJ 题目1042 N!(大数)
- NYOJ 题目45棋盘覆盖(大数)
- NYOJ 题目114 某种序列(大数)
- NYOJ 题目1047 欧几里得(大数)
- ACM~大数加法&&hdu题目样例
- NYOJ 题目517 最小公倍数(大数)
- 南阳理工题目28大数阶乘
- POJ 题目2506Tiling(大数)
- 第三次个人赛题目1【大数】
- 南阳oj 大数阶乘 题目28
- LeetCode|【模拟大数的运算题目汇总】
- Oracle那些事(11)-SQL单表查询
- 21. 吃货续
- Android Studio安装教程
- error C2065: 'AfxGetFileName' : undeclared identifier
- Xen虚拟地址转换
- 大数题目
- HEVC函数入门(2)——帧内编码一个CU
- 【c++】简单异常处理笔记
- 读《李善友:你与高手的距离,并非只差了一万小时练习》有感
- 关于linux系统环境变量的一点理解
- 51nod 1577 异或凑数
- 22. 序列划分
- Web Worker 调用Ajax
- bzoj3790 神奇项链