大整数排序

0人阅读 评论(0) 收藏 举报
分类:

在c语言中我们不方便对字符串进行增删处理,所以我们可以用c++的string类对大整数进行方便的计算。
法一:翻转倒序相加型,这样可以避免字符串一长一短,从最低位开始相加,每次一次把计算结果插入到string字符串的最前面。

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string a,b,result;
    while(cin>>a>>b)
    {
        int carry=0;  //进位
        const size_t n=a.size()>b.size()?a.size():b.size();
        reverse(a.begin(),a.end());
        reverse(b.begin(),b.end());
        for(size_t i=0;i<n;i++)
        {
            int ai=i<a.size()?a[i]-'0':0;
            int bi=i<b.size()?b[i]-'0':0;
            int val=(ai+bi+carry)%10;
            carry=(ai+bi+carry)/10;
            result.insert(result.begin(),val+'0');
        }
        if(carry==1)
            result.insert(result.begin(),'1');
        cout<<result<<endl;
        result.clear();
    }

    return 0;
}

法二:将较短的数的0补齐,然后从最低位开始相加

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string a, b;
    while (cin >> a >> b)
    {
        int temp = 0, carry = 0;
        while (a.size()<b.size())
            a = "0" + a;
        while (a.size()>b.size())
            b = "0" + b;
        for (int i = a.size() - 1; i >= 0; i--)
        {

            temp = a[i] - '0' + b[i] - '0' + carry;
            a[i] = temp%10 + '0';
            if (temp / 10)
                carry = 1;
            else
                carry = 0;
        }
        if (carry)
            a = "1" + a;
        cout << a << endl;
    }
    return 0;
}
查看评论

数据结构基础系列(9):排序

-
  • 1970年01月01日 08:00

九度1190:大整数排序

题目描述: 对N个长度最长可达到1000的数进行排序。 输入: 输入第一行为一个整数N,(1 接下来的N行每行有一个数,数的长度范围为1 每个数都是一个正数,并且保证不包含前缀零。 输出:...
  • Arcsinsin
  • Arcsinsin
  • 2013-10-21 21:28:02
  • 1694

九度题目1190:大整数排序

题目描述: 对N个长度最长可达到1000的数进行排序。 输入: 输入第一行为一个整数N,(1 接下来的N行每行有一个数,数的长度范围为1 每个数都是一个正数,并且保证不包含前...
  • fjx1173865548
  • fjx1173865548
  • 2015-09-10 16:22:51
  • 428

九度OJ 1190:大整数排序 (大数运算、排序)

时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3219 解决:1467 题目描述: 对N个长度最长可达到1000的数进行排序。 输入:...
  • thudaliangrx
  • thudaliangrx
  • 2015-10-26 11:23:40
  • 413

九度OJ--大整数排序

搞了将近半个小时才搞定这道题,好久不练了,手生了。 #include #include #include using namespace std; const int maxn=1000+12; ...
  • mensetmauns
  • mensetmauns
  • 2012-06-20 22:54:18
  • 200

题目1190:大整数排序

点击打开链接 /* 时间:2014.1.30 目的:题目1190:大整数排序 */ #include #include #include struct string{ int ...
  • z_x_b5
  • z_x_b5
  • 2014-01-30 08:35:41
  • 1275

C++高精度大整数模板

#include #include #include #include #include #include using namespace std; #define ll unsigned long ...
  • u010489389
  • u010489389
  • 2014-08-01 22:05:19
  • 779

牛客---大整数的排序

题目描述 对N个长度最长可达到1000的数进行排序。  输入描述: 输入第一行为一个整数N,(1...
  • peiyao456
  • peiyao456
  • 2016-12-13 18:34:03
  • 367

题目1190:大整数排序 九度OJ

题目1190:大整数排序 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4694 解决:2108 题目描述: 对N个长度最长可达到...
  • qq_34447388
  • qq_34447388
  • 2017-04-28 13:16:26
  • 115

数串: 对字符串排序(C++11标准)

题目描述 设有n个正整数,将他们连接成一排,组成一个最大的多位整数。 如:n=3时,3个整数13,312,343,连成的最大整数为34331213。 如:n=4时,4个整数7,13,4,246连...
  • Code_star_one
  • Code_star_one
  • 2018-03-27 23:37:42
  • 29
    个人资料
    持之以恒
    等级:
    访问量: 4188
    积分: 904
    排名: 5万+
    博客专栏
    文章存档