[困难的a+b]aplusb

Descripition

FJ 在教奶牛做加法运算!奶牛很聪明,她们很快就厌倦了,于是希望你能帮她们编一个程序应付FJ。FJ 每次会给奶牛一张纸,上面分两行写着两个加数,奶牛只要把结果写在另一张纸上就可以了。
请注意! 由于奶牛学会了小数运算, 并在FJ 前炫耀, 因此FJ 会想尽办法刁难奶牛, 但他保证加数的书写合法并且每行不超过250个字符,以免留下不好的名声。输入文件中可能含有无意义的空白字符,你应该忽略它们。
你的结果应该以最简洁易懂的形式输出,例如不要有多余的零或其它不必要的字符。

Sample Input

10000.0
+01

Sample Output

10001

高精度a+b&高精度a-b,注意预处理就行了。
代码又长又丑,别介意。

#include<cstdio>
#include<cstring>
using namespace std;
char ss[260];
int truess[260],tlen;
struct zhnode
{
    int len,a[260];
    zhnode()
    {
        len;
        memset(a,0,sizeof(a));
    }
}ans,jia1,jia2;
struct xinode
{
    int len,a[260];
    xinode()
    {
        len;
        memset(a,0,sizeof(a));
    }
}sum,jia3,jia4;
int _max(int x,int y){return x>y?x:y;}
void jiafa1()
{
    ans.len=_max(jia1.len,jia2.len);
    for(int i=1;i<=ans.len;i++)ans.a[i]=jia1.a[i]+jia2.a[i];
    for(int i=1;i<=ans.len;i++)if(ans.a[i]>9){ans.a[i]%=10;ans.a[i+1]++;}
    if(ans.a[ans.len+1]>0)ans.len++;
}
bool hh;
void jiafa2()
{
    sum.len=_max(jia3.len,jia4.len);
    for(int i=1;i<=sum.len;i++)sum.a[i]=jia3.a[i]+jia4.a[i];
    for(int i=sum.len;i>=1;i--)if(sum.a[i]>9){sum.a[i]%=10;sum.a[i-1]++;}
    if(sum.a[0]>0)hh=1;
}
struct jiannode
{
    int len,a[260];
    jiannode()
    {
        len=0;
        memset(a,0,sizeof(a));
    }
}jian1,jian2;
int bijiao(jiannode x,jiannode y)
{
    if(x.len<y.len)return -1;
    else if(x.len>y.len)return 1;
    else
    {
        for(int i=1;i<=x.len;i++)
        {
            if(x.a[i]<y.a[i])return -1;
            else if(x.a[i]>y.a[i])return 1;
        }
    }
    return 0;
}
void jianfa1(jiannode x,jiannode y)
{
    ans.len=_max(x.len,y.len);
    for(int i=1;i<=ans.len;i++)ans.a[i]=x.a[i]-y.a[i];
    for(int i=ans.len;i>=1;i--)if(ans.a[i]<0){ans.a[i]+=10;ans.a[i-1]--;}
}
int main()
{
    freopen("aplusb.in","r",stdin);
    freopen("aplusb.out","w",stdout);
    int fu1,fu2;
    bool bk;int len;
    int bk1,bk2;
    gets(ss+1);
    len=strlen(ss+1);
    bk=false;tlen=0;bk1=-1;fu1=0;
    for(int i=1;i<=len;i++)
    {
        if(ss[i]=='-')fu1++;
        else if(ss[i]<='0'&&ss[i]>'9'&&bk==false);
        else if(ss[i]=='.'){truess[++tlen]='.';bk1=tlen;}
        else if(ss[i]>='0'&&ss[i]<='9')truess[++tlen]=ss[i]-'0';
    }
    for(int i=tlen;i>=1;i--){if(truess[i]<=0&&truess[i]>9)tlen--;else break;}
    if(bk1!=-1)
    {
        for(int i=bk1-1;i>=1;i--)jia1.a[++jia1.len]=truess[i];
        if(truess[bk1+1]==0&&tlen-bk1==1);
        else for(int i=bk1+1;i<=tlen;i++)jia3.a[++jia3.len]=truess[i];
    }
    else for(int i=tlen;i>=1;i--)jia1.a[++jia1.len]=truess[i];

    gets(ss+1);
    len=strlen(ss+1);
    bk=false;tlen=0;bk2=-1;fu2=0;
    for(int i=1;i<=len;i++)
    {
        if(ss[i]=='-')fu2++;
        else if(ss[i]<='0'&&ss[i]>'9'&&bk==false);
        else if(ss[i]=='.'){truess[++tlen]=0;bk2=tlen;}
        else if(ss[i]>='0'&&ss[i]<='9')truess[++tlen]=ss[i]-'0';
    }
    for(int i=tlen;i>=1;i--){if(truess[i]<=0&&truess[i]>9)tlen--;else break;}
    if(bk2!=-1)
    {
        for(int i=bk2-1;i>=1;i--)jia2.a[++jia2.len]=truess[i];
        if(truess[bk2+1]==0&&tlen-bk2==1);
        else for(int i=bk2+1;i<=tlen;i++)jia4.a[++jia4.len]=truess[i];
    }
    else for(int i=tlen;i>=1;i--)jia2.a[++jia2.len]=truess[i];


    if(fu1%2==1&&fu2%2==0)
    {
        int max1=_max(jia1.len,jia2.len);
        for(int i=max1;i>=1;i--)
        {
            jian1.a[i]=jia1.a[max1-i+1];
            jian2.a[i]=jia2.a[max1-i+1];
        }
        int max2=_max(jia3.len,jia4.len);
        for(int i=max1+1;i<=max2+max1;i++)
        {
            jian1.a[i]=jia3.a[i-max1];
            jian2.a[i]=jia4.a[i-max1];
        }
        jian1.len=max2+max1;
        jian2.len=max2+max1;
        int lei=bijiao(jian1,jian2);
        if(lei==0){printf("0\n");return 0;}
        else if(lei==-1)jianfa1(jian2,jian1);
        else jianfa1(jian1,jian2);
        if(lei==1)printf("-");
        bk=false;
        for(int i=ans.len;i>=1;i--)
        {
            if(ans.a[i]==0&&i>max1){ans.len--;}
            else break;
        }
        int k;
        for(int i=1;i<=ans.len;i++)
        {
            if(ans.a[i]==0&&i<max1);
            else{k=i;break;}
        }
        for(int i=k;i<=ans.len;i++)
        {
            printf("%d",ans.a[i]);
            if(i==max1&&max1!=ans.len)printf(".");
        }
    }
    else if(fu1%2==0&&fu2%2==1)
    {
        int max1=_max(jia1.len,jia2.len);
        for(int i=max1;i>=1;i--)
        {
            jian1.a[i]=jia1.a[max1-i+1];
            jian2.a[i]=jia2.a[max1-i+1];
        }
        int max2=_max(jia3.len,jia4.len);
        for(int i=max1+1;i<=max2+max1;i++)
        {
            jian1.a[i]=jia3.a[i-max1];
            jian2.a[i]=jia4.a[i-max1];
        }
        jian1.len=max2+max1;
        jian2.len=max2+max1;
        int lei=bijiao(jian1,jian2);
        if(lei==0){printf("0\n");return 0;}
        else if(lei==-1)jianfa1(jian2,jian1);
        else jianfa1(jian1,jian2);
        if(lei==-1)printf("-");
        bk=false;
        for(int i=ans.len;i>=1;i--)
        {
            if(ans.a[i]==0&&i>max1){ans.len--;}
            else break;
        }
        int k;
        for(int i=1;i<=ans.len;i++)
        {
            if(ans.a[i]==0&&i<max1);
            else{k=i;break;}
        }
        for(int i=k;i<=ans.len;i++)
        {
            printf("%d",ans.a[i]);
            if(i==max1)printf(".");
        }
    }
    else
    {
        if(fu1%2==1&&fu2%2==1)printf("-");
        jiafa1();
        hh=0;
        jiafa2();
        if(hh==1)ans.a[1]++;
        if(hh==1)
        {
            for(int i=1;i<=ans.len;i++)
            {
                if(ans.a[i]>9)
                {
                    ans.a[i]%=10;
                    ans.a[i+1]++;
                }
                else break;
            }
            if(ans.a[ans.len+1]>0)ans.len++;
        }
        for(int i=ans.len;i>=1;i--)printf("%d",ans.a[i]);
        for(int i=sum.len;i>=1;i--)
        {
            if(sum.a[i]==0)sum.len--;
            else break;
        }
        if(sum.len==0&&sum.a[1]==0)return 0;
        printf(".");
        for(int i=1;i<=sum.len;i++)printf("%d",sum.a[i]);
    }
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在src文件夹的aplusb.java中实现类aplusb,并从父目录中进行文件读写。首先,首先创建一个名为aplusb.java的源代码文件,该文件应放置在src文件夹下。 在aplusb.java类中,我们需要实现文件的读写操作。为了从父目录读取文件,我们可以使用相对路径来指定文件的位置。相对路径是相对于当前工作目录的路径。假设我们的文件名为input.txt,并且位于父目录中,即src文件夹的上一级目录。 以下是一个示例代码,演示了如何实现从父目录读取input.txt文件,并计算其中两个数字的和,并将结果写入output.txt文件中: ```java import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class aplusb { public static void main(String[] args) { String inputFilePath = "../input.txt"; String outputFilePath = "../output.txt"; try (BufferedReader reader = new BufferedReader(new FileReader(inputFilePath)); BufferedWriter writer = new BufferedWriter(new FileWriter(outputFilePath))) { String line = reader.readLine(); String[] numbers = line.split(" "); int a = Integer.parseInt(numbers[0]); int b = Integer.parseInt(numbers[1]); int sum = a + b; writer.write("结果是:" + sum); System.out.println("结果是:" + sum); } catch (IOException e) { e.printStackTrace(); } } } ``` 在上述代码中,我们首先定义了输入文件的路径inputFilePath和输出文件的路径outputFilePath。通过使用../来指示文件位于父目录中。 然后,在try-with-resources语句中,我们创建了一个BufferedReader对象用于读取input.txt文件的内容,并创建了一个BufferedWriter对象用于写入output.txt文件。 我们从input.txt文件中读取一行,并使用split方法将该行分割为两个字符串表示的数字a和b。我们将它们转换为整数类型,然后计算它们的和。 最后,我们将结果写入output.txt文件,并在控制台打印结果。 请注意,在实际运行代码之前,确保存在具有相应文件名的文件,且位于正确的位置(父目录中)。 希望以上解答对您有所帮助!如果您还有任何问题,请随时追问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值