2018年北京信息科技大学第十届程序设计竞赛暨ACM选拔赛-E-233

题目描述 


Kirai聊天的时候非常喜欢发“233”,“233”来源于猫扑表情第233号,是一张捶地大笑的表情。
Kirai每当看到很好玩的消息的时候总会回一串“2333...”。
Kirai其实十分高冷,他发现了这个问题。为了不希望别人立刻知道他在笑,他决定将两个“233..”乘在一起发出去。

输入描述:

输入样例有多组,全部是正整数。首先输入样例组数T(T≤1500)。
接下来输入T组数,每组数字由两个233串组成,每个233串长度3≤n≤50。
数据保证每个233串必然会有一个2作为开头,并且3的数量≥2。

输出描述:

两个233串的乘积。
示例1

输入

2
233 233
23333333333333333333333333333333333333333333333333 23333333333333333333333333333333333333333333333333

输出

54289
544444444444444444444444444444444444444444444444428888888888888888888888888888888888888888888888889

思路:大数乘法,两个格式一样的数相乘一定有规律对吧,所以我们还可以找规律。。。

大数最好用java写:

import java.io.*;
import java.util.*;
import java.math.*;
  
public class Main {
    public static void main(String [] args) {
        BigInteger a,b,c;
        int n;
        Scanner cin = new Scanner(System.in);
        n = cin.nextInt();
        for(int i=0;i<n;i++) {
            a = cin.nextBigInteger();
            b = cin.nextBigInteger();
            c = a.multiply(b);
            System.out.println(c);
        }
    }
}

规律代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
     int t;
     char a[55],b[55];
     scanf("%d",&t);
     getchar();
     while(t--)
     {
         scanf("%s%s",a,b);
         int la = strlen(a) - 1,lb = strlen(b) - 1;
         if(la == lb)
         {
             printf("5");
             for(int i = 0; i < la - 1; i++) printf("4");
             printf("2");
             for(int i = 0; i < la - 1; i++) printf("8");
             printf("9\n");
         }
         else
         {
             if(la > lb) swap(la,lb);
             printf("5");
             for(int i = 0; i < la - 1; i++) printf("4");
             printf("3");
             for(int i = 0; i < lb - la - 1; i++) printf("6");
             printf("5");
             for(int i = 0; i < la - 1; i++) printf("8");
             printf("9\n");
         }
     }
     return 0;
}



猜你喜欢

转载自blog.csdn.net/sugarbliss/article/details/80230001
今日推荐