zoukankan      html  css  js  c++  java
  • A × B problem

    题目描述

    Redraiment碰到了一个难题,需要请你来帮忙:给你两个整数,请你计算A × B。

    输入

    数据的第一行是整数T(1 ≤ T ≤ 20),代表测试数据的组数。 接着有T组数据,每组数据只有一行,包括两个正整数A和B。 但A和B非常大,Redraiment能保证这些数用long来保存一定会溢出。 但A和B的位数最大不会超过100位。

    输出

    对应每组测试数据,你都要输出两行: 第一行为:"Case #:", # 代表这是第几组测试数据。 第二行是一个等式:"A * B = Sum", Sum 代表 A × B 的结果。 你要注意这个等式里包含了几个空格。 要求每组数据之间都需要保留一个空行。

    样例输入

    2
    1 2
    123456789 987654321

    样例输出

    Case 1:
    1 * 2 = 2
    
    Case 2:
    123456789 * 987654321 = 121932631112635269
    数组模拟,要细心。
    #include<iostream>
    #include<cstring>
    #include<queue>
    using namespace std;
    int a[1000]={0},b[1000]={0},mm[5000]={0};
    void daozhi(string s,int a[])//数据倒置存入数组中;
    {
      int i,m=0;
      for(i=s.size()-1;i>=0;i--)
      {
        a[m++]=s[i]-'0';
      }
    }
    void rebuild(string s,string ss,int a[],int b[],int mm[])//乘法的模拟
    {
      int n,k,i,j;
      for(i=0;i<s.size();i++)
      {
        n=i;
        for(j=0;j<ss.size();j++)
        {
          k=(mm[n]+(a[i]*b[j])%10)/10;
          mm[n]=(mm[n]+(a[i]*b[j])%10)%10;
          mm[n+1]+=((a[i]*b[j])/10+k);
          n++;
        }
      }
    }
    int main()
    {
      int n,count,i;
      cin>>n;
      count=n;
      while(n--)
      {
        string c,d;
        cin>>c>>d;
        cout<<"Case "<<count-n<<":"<<endl;
        daozhi(c,a);
        daozhi(d,b);
        rebuild(c,d,a,b,mm);
        cout<<c<<" *"<<" "<<d<<" ="<<" ";
        for(i=4999;i>=0;i--)
        {
          if(mm[i]) break;
        }
        for( ;i>=0;i--)
        {
          cout<<mm[i];
        }
        cout<<endl;
        if(n) cout<<endl;
        memset(mm,0,sizeof(mm));
      }
      return 0;
    }
  • 相关阅读:
    Word Ladder
    Word Ladder II
    Valid Palindrome
    java 正则表达式-忽略大小写与多行匹配
    Vue自定义指令
    定义格式化时间的全局过滤器
    Vue过滤器的使用
    daterangepicker 设置默认值为空(转载)
    js时间戳与日期格式之间的互转
    Vuedevtools安装
  • 原文地址:https://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/6607691.html
Copyright © 2011-2022 走看看