大数相加和大数相乘以及打印从1到最大的n位数
string add(string a, string b){
int nlength;
int diff;
if (a.size() > b.size()){
nlength = a.size();
diff = a.size() - b.size();
b.insert(b.begin(), diff, '');
//cout << b << endl;
}
else{
nlength = b.size();
diff = b.size() - a.size();
a.insert(a.begin(), diff, '');
//cout << a << endl;
}
//cout << a << endl;
//cout << b << endl;
//cout << c << endl;
int takeover = ;
for (int i = nlength - ; i >= ; i--){
int temp = a[i]-'' + b[i] - '' + takeover;
cout << a[i] << " " << b[i] << endl;
cout << temp << endl;
if (temp >= ){
takeover = ;
b[i] = temp + '' - ;
//cout << c[j] << endl;
}
else{
b[i] = temp + '';
takeover = ;
}
}
//cout << takeover<<" " << j << endl;
if (takeover == )b = '' + b;
return b;
}
void print(string str){
int count = ;
for (int i = ; i < str.size(); i++){
if (str[i] == '')count++;
else
break;
}
cout << str.substr(count, str.size() - count) << endl;;
}
注:char a='9';
int b=a-'0';
a的范围只能是0到9
better:
一位一位相加,然后算和算进位,最后根据进位情况看需不需要补一个高位
string addStrings(string num1, string num2) {
string res = "";
int m = num1.size(), n = num2.size(), i = m - , j = n - , carry = ;
while (i >= || j >= ) {
int a = i >= ? num1[i--] - '' : ;
int b = j >= ? num2[j--] - '' : ;
int sum = a + b + carry;
res.insert(res.begin(), sum % + '');
carry = sum / ;
}
return carry ? "" + res : res;
}
大数相乘
class Solution {
public:
string multiply(string num1, string num2) {
int n=num1.size();
int m=num2.size();
vector<int>temp(n+m,);//一个m位和n位数相乘得到的数最多是n+m位
for(int i=n-;i>=;i--){
for(int j=m-;j>=;j--){
temp[i+j+]+=(num1[i]-'')*(num2[j]-'');
}
}
int bi=;
for(int i=temp.size()-;i>=;i--){
temp[i]=temp[i]+bi;
bi=temp[i]/;
temp[i]=temp[i]%;
}
int i = ;
while (temp[i] == )i++;//跳过前面多余的0
if(i>=temp.size())return "";
string res="";
for(;i<temp.size();i++){
res+=temp[i]+'';
}
return res;
}
};
打印从1到最大n位数
#include<iostream>
#include<string>
#include<vector>
using namespace std; bool stop(string &str){
bool stop = false;
int i = str.size() - ;
int carry = ;
while (i >= ){
int tmp = str[i] - '' + carry;
if (i == str.size() - )tmp++;
if (tmp >=){
if (i == ){
stop = true;
}
else{
str[i] = tmp % + '';
carry = tmp / ;
i--;
} }
else{
str[i] = tmp + '';
break;
}
}
return stop;
} void print(string &str){
bool flag = false;
string res;
for (int i = ; i < str.size(); i++){
if (str[i] == ''&&flag == false)continue;
else if (str[i] != ''&&flag == false){
flag = true;
res.push_back(str[i]);
}
else{
res.push_back(str[i]);
}
}
cout << res << endl;
}
void PrintNumber(int n){
string res(n,'');
while (!stop(res)){
print(res);
}
}
int main(){
int n = ;
PrintNumber(n);
system("pause");
return ;
}
大数相加和大数相乘以及打印从1到最大的n位数的更多相关文章
- Linux C/C++ 编程练手 --- 大数相加和大数相乘
最近写了一个大数相乘和相加的程序,结果看起来是对的.不过期间的效率可能不是最好的,有些地方也是临时为了解决问题而直接写出来的. 可以大概说一下相乘和相加的解决思路(当然,大数操作基本就是两个字符串的操 ...
- Java 大数相乘、大数相加、大数相减
思路来源:: https://blog.csdn.net/lichong_87/article/details/6860329 /** * @date 2018/6/22 * @description ...
- HDU 1316 (斐波那契数列,大数相加,大数比较大小)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1316 Recall the definition of the Fibonacci numbers: ...
- 代码题(59)— 字符串相加、字符串相乘、打印最大n位数
1.415. 字符串相加 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 思路:和链表相加类似,求进位. class Solution { public: string addS ...
- Java实现大数相加、相乘(不使用BigInteger)
大数相加: package algorithm; //使用BigInteger类验证 import java.math.BigInteger; public class BigAdd { public ...
- 求解Catalan数,(大数相乘,大数相除,大数相加)
Catalan数 卡塔兰数是组合数学中一个常在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰(1814–1894)命名.历史上,清代数学家明安图(1692年-1763年)在其<割圜 ...
- A+B and A*B problem 大数相加 相乘 模拟
A+B and A*B problem 大数相加 相乘 模拟 题意 给你两个数a和b,这两个数很大,然后输出这两个数相加的和,相乘的积. 解题思路 模拟,但是还是搜了搜代码实现,发现这个大佬写的是真的 ...
- hdu acm-1047 Integer Inquiry(大数相加)
Integer Inquiry Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- 用字符串模拟两个大数相加——java实现
问题: 大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求.可以使用字符串来表示大数,模拟大数相加的过程. 思路: 1.反转两个字符串,便于从低位到高位相加和最高位 ...
随机推荐
- DHCP、DHCP Snooping及DHCP relay工作原理入门及实践(转)
原文https://blog.51cto.com/5167020/2312718 序:DHCP服务相对简单,写本文的目的是为了讲一些DHCP安全方面的技术. 1.DHCP基础 DHCP 全称动态主机配 ...
- TCP/IP学习笔记18--TCP--拥塞控制 (慢开始, 拥塞避免, 快重传和快恢复)
用最多的梦面对未来 -- 李嘉诚 在某段时间,若对网络资源的需求超过了该资源所能提供 ...
- PHP保留两位小数显示
<?php $num = '10.4567'; //第一种:利用round()对浮点数进行四舍五入 echo round($num,2).PHP_EOL; //10.46 //第二种:利用spr ...
- 不借助其他任何软件防止QQ被盗的小技巧
分享一个小技巧(防止QQ被盗号): 在登录的时候前面加个0,点击登录,如果显示账号不存在,是因为你没有在添加或注册账号这儿登录,也就是切换账号.PC端也可以,如下图: ...
- 百度小程序上传失败 ServerError:30010的原因
最近通过uniapp编译百度智能小程序后上传遇到了报错,错误码为30010. 原因很简单开发者工具和版本库产生了冲突. 两个解决方案,升级开发者工具,降低发布时的版本库 exit;
- Java 总结篇2
第02章:数据类型和运算符 一.概述: 1.数据类型:int.float.char.boolean 2.运算符:算术运算符.赋值运算符.关系运算符.逻辑运算符.位运算符(了解即可).条件运算符 3.基 ...
- bootstrap Modal或者 bootbox弹窗时,页面混动至顶部
bootstrap使用Modal时,页面自动滚动至了最顶部, 调用bootbox时,也是如此 查了半天资料,最后参考下述帖子,解决问题 https://stackoverflow.com/questi ...
- M-SOLUTIONS Programming Contest
A.(n-2)*180 #include<cstdio> #include<cstring> #include<iostream> #include<algo ...
- Zookeeper学习笔记(三)——java客户端代码操作
Zookeeper客户端java代码操作 上篇博客记录了shell命令操作zookeeper集群的方式,这次尝试采用java代码来操作.通过查阅API,发现并不困难. 1. 首先获得客户端与服务器的连 ...
- IdentityServer4实现OAuth2.0四种模式之授权码模式
接上一篇:IdentityServer4实现OAuth2.0四种模式之隐藏模式 授权码模式隐藏码模式最大不同是授权码模式不直接返回token,而是先返回一个授权码,然后再根据这个授权码去请求token ...