标题:高精度减法,数字大了就不对了,求大神帮忙看看哪里出问题了?
只看楼主
xjf120018
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2018-8-2
结帖率:40%
已结贴  问题点数:20 回复次数:4 
高精度减法,数字大了就不对了,求大神帮忙看看哪里出问题了?
https://www.
代码如下
#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;
char a[10005],b[10005],c[10005],d[10005],s[10005],f;
int main()
{
    int i=1,j=1,l,k,z;
    do
    {
        a[i]=getchar();
        c[i]=a[i];
        i++;
    }
    while(a[i-1]!='\n');
    do
    {
        b[j]=getchar();
        d[j]=b[j];
        j++;
    }
    while(b[j-1]!='\n');
    l=i>j?i:j;
    for(k=l-2;k>=1;k--)
    {
        if(a[k]>=b[k])
        {
            int x=a[k]-48;
            int y=b[k]-48;
            z=x-y;
            s[k]=z+48;
        }
        else if(a[k]<b[k])
        {
            if(k!=1)
            {
                a[k-1]--;
                a[k]+=10;
                s[k]=a[k]-b[k]+48;
            }
            else
            {
                cout<<"-";
                for(k=l-2;k>=1;k--)
            {
                if(d[k]>=c[k])
                {
                    int x=d[k]-48;
                    int y=c[k]-48;
                    z=x-y;
                    s[k]=z+48;
                }
                else if(d[k]<c[k])
                {
                    d[k-1]--;
                    d[k]+=10;
                    s[k]=d[k]-c[k]+48;
                }
                }
            }
        }
    }
    for(int m=1;m<=l-1;m++)
    cout<<s[m];
    return 0;
}
搜索更多相关主题的帖子: 高精度 减法 数字 int for 
2018-08-09 22:27
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
我输入
11
2
你的代码输出
-0!!

2018-08-10 08:52
no1xijin
Rank: 9Rank: 9Rank: 9
来 自:江西
等 级:贵宾
威 望:20
帖 子:211
专家分:1207
注 册:2015-7-8
得分:10 
可以参考我写的一个帖子:https://bbs.bccn.net/thread-488504-1-1.html
将里面输出由printf()改为cout()

126邮箱联系方式:no1xijin@126. com
2018-08-10 09:05
xjf120018
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2018-8-2
得分:0 
回复 2楼 rjsp
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a[10005],b[10005],c[10005],d[10005],e[10005],f[10005];
int s[10001],t[10001];
int main()
{
    int g,h,i,j,k,l,m,n,o,p;
    n=0;
    g=h=1;
    i=j=10000;
    do
    {
        e[g]=getchar();
        g++;
    }
    while(e[g-1]!='\n');
    do
    {
        f[h]=getchar();
        h++;
    }
    while(f[h-1]!='\n');
    while(g>=3)
    {
        a[i]=c[i]=e[g-2];
        i--;
        g--;
    }
    while(h>=3)
    {
        b[j]=d[j]=f[h-2];
        j--;
        h--;
    }
    if(i<j)
    {
        for(k=j;k>=i;k--)
        d[k]=b[k]='0';
    }
    else if(i>j)
    {
        for(k=i;k>=j;k--)
        c[k]=a[k]='0';
    }
    else k=i-1;
    k+=1;
    for(l=10000;l>k;l--)
    {
        int sa=a[l];
        int sb=b[l];
        if(sa>sb||(sa==sb&&s[l]==0))
            s[l]+=sa-sb;
        else
        {
            s[l]+=sa+10-sb;
            s[l-1]--;
        }
        if(l==k+1&&(s[l-1]<0||s[l]<0||s[l+1]<0))
        {
            cout<<"- ";
            n=1;
            for(m=10000;m>k;m--)
            {
                int ta=d[m];
                int tb=c[m];
                if(ta>tb||(ta==tb&&t[m]==0))
                    t[m]+=ta-tb;
                else
                {
                    t[m]+=ta+10-tb;
                    t[m-1]--;
                }
            }
        }
    }
    if(n==0)
    {
        for(o=1;o<=10000;o++)
        if(s[o]!=0) break;
    }
    else if(n==1)
    {
        for(o=1;o<=10000;o++)
        if(t[o]!=0) break;
    }
    for(int q=o;q<=10000;q++)
    {
        if(n==0) cout<<s[q];
        else if(n==1) cout<<t[q];
    }
    if(o==10001) cout<<"0";
    return 0;
}
这个有什么问题?试了几个都对,但通不过
2018-08-12 18:30
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
回复 4楼 xjf120018
自己测试一下嘛,我输入
2
11
代码输出 - 9
应该输出 -9 吧
2018-08-13 08:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-489122-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.540089 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved