栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

字符串除法(针对大整数)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

字符串除法(针对大整数)

进制转换

基础的进制转换就是,先取模再整除,如此反复即可得到十进制转二进制的数组,注意输出时倒序输出即可。

数字比较大的进制转换,所以要使用字符串进行存储,难点就在于如何对十进制字符串进行转换。

其中字符串除法是模拟竖式除法,从前往后除,我刚开始的时候开别人的题解就这一点没有明白,举个例子,987654 除以 321,计算步骤如下:

取被除数前三位(除数长度) - 987,除以321,结果是 3 余 24
余数 24 后面再加一位被除数 6 -> 246,但发现不够 321 除,结果添 0
246 再取一位被除数 -> 2465,除以321,结果7 余21
余数 21 再取一位被除数 -> 2184,除以321,结果是6
检查被除数已经取完,运行结束,得到结果 3076


因为这样可能导致字符串前几位有0,可以遍历一下去掉前面的0.

#include
#include
#include
using namespace std;
string Divide(string str,int x)
{
    int reminder=0;
    for(int i=0;i>str)
    {
        vector binary;
        while(str.size()!=0)
        {
            int last=str[str.size()-1]-'0';
            binary.push_back(last%2);//取模运算
            str=Divide(str,2);//整除运算
        }
        for(int i=binary.size()-1;i>=0;i--)
        {
            cout< 

遇到一个有意思的综合题,先把十进制转成二进制,再把二进制转成十进制

十进制转二进制用的是先取模后除法
二进制转十进制就是先乘法后加法

#include
#include
#include
using namespace std;
string Divide(string str,int x)//除法
{
    int remain=0;
    for(int i=0;i=0;i--)
    {
        int current=x*(str[i]-'0')+carry;
        str[i]=current%10+'0';
        carry=current/10;
    }
    if(carry!=0)
    {
        str="1"+str;
    }
    return str;
}
string Addt(string str,int x)
{
    int carry=x;
    for(int i=str.size()-1;i>=0;i--)
    {
        int current=(str[i]-'0')+carry;
        str[i]=current%10+'0';
        carry=current/10;
    }
    if(carry!=0)
    {
        str="1"+str;
    }
    return str;
}
int main()
{
    string str;
    
    while(cin>>str)
    {
        vector binary;
        while(str.size()!=0)
        {
            int last=str[str.size()-1]-'0';
            binary.push_back(last%2);
            str=Divide(str, 2);
        }
        string answer="0";
        for(int i=0;i
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/302379.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号