zoukankan      html  css  js  c++  java
  • 【高精度】减法神童

    问题 D: 【高精度】减法神童

    时间限制: 1 Sec  内存限制: 64 MB
    提交: 7  解决: 5
    [提交] [状态] [讨论版] [命题人:外部导入]

    题目描述

    在科学城里住着一位减法神童,他可以在一秒钟内算出两个数相减的结果。这两个数可不是普通的数字,它们是11位以上的“宠然大物”。为了证明自己神奇的计算能力,减法神童请全城的人都来出题考自己,只要答错一题他就自愿放弃“减法神童”的称号。
    你想考考减法神童吗?还是先编写一个程序帮我们算出任意两个11位以上的数相减的精确结果吧。

    输入

    第1行是被减数A,第2行是减数B(A,B的位数大于11,小于200)。

    输出

    A-B的结果。

    样例输入

    5894379463257
    1245648324567
    

    样例输出

    4648731138690
     1 #include <iostream>
     2 #include<string>
     3 #include<algorithm>
     4 using namespace std;
     5 string s,t;
     6 int a[5005],b[5005],c[5005];
     7 int main()
     8 {
     9     cin>>s>>t;
    10     int len1=s.size(),len2=t.size();
    11     for(int i=len1-1;i>=0;i--)
    12         a[len1-i-1]=s[i]-'0';
    13     for(int i=len2-1;i>=0;i--)
    14         b[len2-i-1]=t[i]-'0';
    15     int len=max(len1,len2);
    16     for(int i=0;i<len;i++)
    17     {
    18         c[i]+=(a[i]+b[i]);
    19         if(c[i]>9)
    20         {
    21             c[i]-=10;
    22             c[i+1]++;
    23         }
    24     }
    25     if(c[len]!=0)
    26     {
    27         len++;
    28     }
    29     for(int i=len-1;i>=0;i--)
    30         cout<<c[i];
    31     cout<<endl;
    32     return 0;
    33 }
    View Code

     由于疏忽,上面代码贴成了加法的,现已更改为减法,代码如下(感谢杨翰齐指出错误)

     1 #include <iostream>
     2 #include<string>
     3 using namespace std;
     4 string s,t;
     5 int a[300],b[300],c[300];
     6 int main()
     7 {
     8     cin>>s>>t;
     9     int len1=s.size();
    10     int len2=t.size(),len;
    11     if(s==t)
    12     {
    13         cout<<"0"<<endl;
    14         return 0;
    15     }
    16     if((len1==len2&&s<t)||len1<len2)
    17     {
    18         cout<<"-";
    19         string temp;
    20         temp=s;
    21         s=t;
    22         t=temp;
    23         len=len2;
    24         swap(len1,len2);
    25     }
    26     len=len1;
    27     for(int i=len1-1;i>=0;i--){
    28         a[len1-i-1]=s[i]-'0';
    29     }
    30     for(int i=len2-1;i>=0;i--)
    31         b[len2-i-1]=t[i]-'0';
    32     for(int i=0;i<len;i++)
    33     {
    34         c[i]+=(a[i]-b[i]);
    35         if(c[i]<0)
    36         {
    37             c[i]+=10;
    38             c[i+1]--;
    39         }
    40     }
    41     while(c[len]==0)
    42     {
    43         len--;
    44     }
    45     for(int i=len;i>=0;i--)
    46         cout<<c[i];
    47     cout<<endl;
    48 //    cout << "Hello world!" << endl;
    49     return 0;
    50 }
    View Code
    如有错误,请指正,感谢!
  • 相关阅读:
    英雄
    Sublime text 2/3 中 Package Control 的安装与使用方法
    python安装
    flex与C# Socket通信
    ActionScript接收socket服务器发送来的数据
    什么是Socket,为什么要用Socket
    Response.End(); 用HttpContext.Current.ApplicationInstance.CompleteRequest 代替
    探索C#之6.0语法糖剖析
    行为树(Behavior Tree)实践(1)– 基本概念
    浅谈层次化的AI架构
  • 原文地址:https://www.cnblogs.com/scott527407973/p/9314501.html
Copyright © 2011-2022 走看看