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位数的更多相关文章

  1. Linux C/C++ 编程练手 --- 大数相加和大数相乘

    最近写了一个大数相乘和相加的程序,结果看起来是对的.不过期间的效率可能不是最好的,有些地方也是临时为了解决问题而直接写出来的. 可以大概说一下相乘和相加的解决思路(当然,大数操作基本就是两个字符串的操 ...

  2. Java 大数相乘、大数相加、大数相减

    思路来源:: https://blog.csdn.net/lichong_87/article/details/6860329 /** * @date 2018/6/22 * @description ...

  3. HDU 1316 (斐波那契数列,大数相加,大数比较大小)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1316 Recall the definition of the Fibonacci numbers: ...

  4. 代码题(59)— 字符串相加、字符串相乘、打印最大n位数

    1.415. 字符串相加 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 思路:和链表相加类似,求进位. class Solution { public: string addS ...

  5. Java实现大数相加、相乘(不使用BigInteger)

    大数相加: package algorithm; //使用BigInteger类验证 import java.math.BigInteger; public class BigAdd { public ...

  6. 求解Catalan数,(大数相乘,大数相除,大数相加)

    Catalan数 卡塔兰数是组合数学中一个常在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰(1814–1894)命名.历史上,清代数学家明安图(1692年-1763年)在其<割圜 ...

  7. A+B and A*B problem 大数相加 相乘 模拟

    A+B and A*B problem 大数相加 相乘 模拟 题意 给你两个数a和b,这两个数很大,然后输出这两个数相加的和,相乘的积. 解题思路 模拟,但是还是搜了搜代码实现,发现这个大佬写的是真的 ...

  8. hdu acm-1047 Integer Inquiry(大数相加)

    Integer Inquiry Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  9. 用字符串模拟两个大数相加——java实现

    问题: 大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求.可以使用字符串来表示大数,模拟大数相加的过程. 思路: 1.反转两个字符串,便于从低位到高位相加和最高位 ...

随机推荐

  1. docker+k8s基础篇二

    Docker+K8s基础篇(二) docker的资源控制 A:docker的资源限制 Kubernetes的基础篇 A:DevOps的介绍 B:Kubernetes的架构概述 C:Kubernetes ...

  2. .Net 配置 swagger 使用nginx反向代理后请求带端口号导致无法正常访问---解决方法

    1 webconfig中 appsetting 中增加配置 <appSettings> <add key="aspnet:UseHostHeaderForRequestUr ...

  3. input和while循环——Python编程从入门到实践

    input( ) input()函数:让程序运行暂停,等待用户输入. message = input('Tell me something, and I will repeat it back to ...

  4. Mac上go的下载安装教程

    mac上go的下载安装教程 官网https://golang.google.cn/dl/下载,安装 环境变量配置 参考https://www.jianshu.com/p/5c1873eaf3ca Ba ...

  5. The three day 给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本

    """ 给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本. 所谓无效化 IP 地址,其实就是用 "[.]" 代替了每个 ...

  6. 全栈项目|小书架|微信小程序-项目结构设计分包

    前面的文章 介绍了服务端的基础搭建以及用户模块的设计,接下来就是在服务端和客户端实现具体的业务了. 本篇文章先来介绍微信小程序开发的项目结构设计,也就是项目分包情况. 由于项目是在<极客时间-9 ...

  7. Spring Cloud Alibaba学习笔记(17) - Spring Cloud Gateway 自定义路由谓词工厂

    在前文中,我们介绍了Spring Cloud Gateway内置了一系列的路由谓词工厂,但是如果这些内置的路由谓词工厂不能满足业务需求的话,我们可以自定义路由谓词工厂来实现特定的需求. 例如有某个服务 ...

  8. java 单链表反转

    最近与人瞎聊,聊到各大厂的面试题,其中有一个就是用java实现单链表反转.闲来无事,决定就这个问题进行一番尝试. 1.准备链表 准备一个由DataNode组成的单向链表,DataNode如下: pub ...

  9. ubuntu ufw 配置

    ubuntu ufw 配置 Ubuntu 18.04 LTS 系统中已经默认附带了 UFW 工具,如果您的系统中没有安装,可以在「终端」中执行如下命令进行安装: 1 sudo apt install ...

  10. Widget Size and Position !!!!!!!!!!!!!!!!!!

    https://medium.com/@diegoveloper/flutter-widget-size-and-position-b0a9ffed9407 I have read many ques ...