T1308 高精除(#Ⅱ- 1)

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

【题目描述】

高精除以高精,求它们的商和余数。

【输入】

输入两个低于300位的正整数。

【输出】

输出商和余数。

【输入样例】

1231312318457577687897987642324567864324567876543245671425346756786867867867
1231312318767141738178325678412414124141425346756786867867867

【输出样例】

999999999748590
179780909068307566598992807564736854549985603543237528310337

【源程序】

#include<iostream>  
#include<cstring>  
using namespace std;  
int a[100],b[100],c[100];  
int compare(int a[],int b[])//比较a、b,若a>b为1;若a<b为-1;若a=b为0  
{  
    int i;  
    if(a[0]>b[0])  
        return 1;  
    if(a[0]<b[0])  
        return -1;  
    for(i=a[0];i>0;i--)//从高位到低位比较  
    {  
        if(a[i]>b[i])  
            return 1;  
        if(a[i]<b[i])  
            return -1;  
    }  
    return 0;  
}  
  
void subduction(int a[],int b[])//计算a=a-b  
{  
    int flag;  
    int i;  
  
    flag=compare(a,b);  
    if(flag==0)//相等  
    {  
        a[0]=0;  
        return;  
    }  
    if(flag==1)//大于  
    {  
        for(i=1;i<=a[0];i++)  
        {  
            if(a[i]<b[i])//若不够向上借位  
            {  
                a[i+1]--;  
                a[i]+=10;  
            }  
            a[i]-=b[i];  
        }  
        while(a[0]>0&&a[a[0]]==0)//删除前导0  
            a[0]--;  
        return;  
    }  
}  
int main()  
{  
    char str1[100],str2[100];  
    int i,j;  
  
    memset(a,0,sizeof(a));  
    memset(b,0,sizeof(b));  
    memset(c,0,sizeof(c));  
  
    cin>>str1>>str2;  
    a[0]=strlen(str1);//a[0]存储串1的位数  
    b[0]=strlen(str2);//b[0]存储串2的位数  
    for(i=1;i<=a[0];i++)  
        a[i]=str1[a[0]-i]-'0';  
    for(i=1;i<=b[0];i++)  
        b[i]=str2[b[0]-i]-'0';  
  
  
    int temp[100];  
    c[0]=a[0]-b[0]+1;  
    for(i=c[0];i>0;i--)  
    {  
        memset(temp,0,sizeof(temp));  
  
        for(j=1;j<=b[0];j++)//从i开始的地方,复制数组b到数组temp  
            temp[j+i-1]=b[j];  
        temp[0]=b[0]+i-1;  
  
        while(compare(a,temp)>=0)//用减法模拟  
        {  
            c[i]++;  
            subduction(a,temp);  
        }  
    }  
  
    while(c[0]>0&&c[c[0]]==0)//删除前导0  
        c[0]--;  
  
    cout<<"商为:";  
    if(c[0]==0)//输出结果  
        cout<<0<<endl;  
    else  
    {  
        for(i=c[0];i>0;i--)  
            cout<<c[i];  
        cout<<endl;  
    }  
  
    cout<<"余数为:";  
    if(a[0]==0)//输出余数  
        cout<<0<<endl;  
    else  
    {  
        for(i=a[0];i>0;i--)  
            cout<<a[i];  
        cout<<endl;  
    }  
  
    return 0;  
} 
查看评论

Markdown使用教程(1小时从小白到精通)

-
  • 1970年01月01日 08:00

高精度除法(高精除高精)

inline bool pan(pp &x,pp &y,int k) { for(int i=1000;i;i--) if(x[i]>y[k+i])return 1; else if(x[...
  • cymxyym
  • cymxyym
  • 2014-06-09 14:53:00
  • 1558

高精度除以低精精度数

原 题:        高精除以低精。输入两个正整数,求它们的商(做整除) 算法分析:      采用按位相除法 代 码:  #include #include #include using name...
  • u014542643
  • u014542643
  • 2017-04-12 16:22:42
  • 436

高精度之高精除低精

#include #include #include using namespace std; int main() { char a1[100],c1[100]; int a[100...
  • WhiStLenA
  • WhiStLenA
  • 2016-09-18 15:10:52
  • 313

高精度除高精度

高精度除法 1)高精度除高精度 传入参数约定:传入第一第二个参数均为string类型,第三个为int型,返回值为string类型 算法思想:倒置,试商,高精度减法。 算法复杂度:o(n^2). #in...
  • liangzhaoyang1
  • liangzhaoyang1
  • 2016-03-18 23:30:36
  • 1032

高精度之高精度除法(高精除以高精)

好像NOIP并不会用到,但是作为强迫症的我还是坚持学了。高精度除以高精度我所知道的有两个思路:...
  • S_Wiper
  • S_Wiper
  • 2017-05-30 16:09:27
  • 2905

pascal 高精度压位(加减乘&高精除单精)

program pro; type mine=array[0..1000000]of int64; var s1,s2:ansistring; n1,n2:mine; ...
  • Free__Radical
  • Free__Radical
  • 2014-10-27 20:53:35
  • 883

高精度除法(高精除以低精)——一步一步算法篇

高精度除法(高精除以低精)利用0~9次的循环减法模拟除法的过程,并计数,从而得到商的值。#include #include #include using namespace std; int main...
  • zhhe0101
  • zhhe0101
  • 2016-05-15 19:49:24
  • 1310

高精度除以单精度 和 高精度对单精度取模

int mod(string a,int b)//高精度 a%b { int ans=0; for(char &c : a) ans=(10*ans+c-'0')%b;...
  • ZengAMing
  • ZengAMing
  • 2017-04-16 23:31:17
  • 594

高精度除单精度

高精度除单精度 传入参数约定:传入第一参数为string类型,第二个为int型,返回值为string类型 算法思想:模拟手工除法。 算法复杂度:o(n). #include #include ...
  • liangzhaoyang1
  • liangzhaoyang1
  • 2016-03-18 23:36:58
  • 1271
    个人资料
    持之以恒
    等级:
    访问量: 3万+
    积分: 4174
    排名: 9198
    文章存档
    最新评论