31 条题解

  • 16
    @ 2022-8-16 17:54:02

    这道题我依然给出两种方法(嘿嘿,没想到吧~)


    方法①(评论区中最多答案的 long long 解题)

    1. 可以定义 long long 型变量 a 和 b
    2. 输入 a 和 b
    3. 输出 a 乘 b 的积

    上代码!(UP AC过,请放心食用)

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        long long a, b;
        cin >> a >> b;
        cout << a * b;
    	return 0;
    }
    

    方法②(大师级玩家观看,高精度乘法计算)

    1. 进行高精度计算,此处不进行太多介绍
    2. 可以列一道竖式来进行解决
    3. 每一次都是 a 乘 b 的各个位

    以下为高精度 AC 代码~

    #include <bits/stdc++.h>
    using namespace std;
    
    const int MAXN = 200 + 4;//根据题目的最大值,+4为了防止A+B出现进位 
    char s1[MAXN] = {};//存储字符串 
    char s2[MAXN] = {};//存储字符串 
    int a[MAXN] = {};//存储加数A 
    int b[MAXN] = {};//存储加数B 
    int c[2 * MAXN] = {};//存储A和B 
    
    int main()
    {
    	scanf("%s %s", s1, s2);//读入字符串 
    	
    	//处理负数
    	bool flaga = false;//乘数a的符号 
    	if ('-' == s1[0])
    	{
    		flaga = true;
    		strcpy(s1, &s1[1]);//删除负号 
    	}
    	bool flagb = false;//乘数b的符号 
    	if ('-' == s1[0])
    	{
    		flaga = true;
    		strcpy(s1, &s1[1]);//删除负号 
    	}
    	//处理输出的负号
    	if ((true == flaga && false == flagb) || (false == flaga && true == flagb))
    		printf("-");
    	//处理乘数1
    	int lena = strlen(s1);
    	for (int i = 0; i < lena; i++)
    	{
    		a[lena - i - 1] = s1[i] - '0';
    	}
    	//处理乘数2
    	int lenb = strlen(s2);
    	for (int i = 0; i < lenb; i++)
    	{
    		b[lenb - i - 1] = s2[i] - '0';
    	}
    	//模拟竖式乘法
    	int jw; //上一轮计算进位
    	for (int i = 0; i < lena; i++)
    	{
    		jw = 0;
    		for (int j = 0; j < lenb; j++)
    		{
    			//交叉乘积
    			c[i + j] = a[i] * b[j] + jw + c[i + j]; //当前乘积+上次乘积进位+原数 
    			jw = c[i + j] / 10; //处理进位 
    			c[i + j] %= 10; 
    		}
    		c[i + lenb] = jw;
    	}
    	//删除前导零
    	int lenc = lena + lenb;
    	for (int i = lenc - 1; i >= 0; i--)
    	{
    		//因为我们是从索引 0 开始,所以最高位是保存在 len - 1
    		if (0 == c[i] && lenc > 1)
    			lenc--;
    		else //第一个不是零的最高位,结束删除
    			break; 
    	} 
    	//逆序打印输出
    	for (int i = lenc - 1; i >= 0; i--)
    		printf("%d", c[i]); 
    	return 0;
    }
    

    制作不易,点个赞吧,看到最后的都是大佬~

  • 9
    @ 2022-12-22 17:36:29

    "简洁"的AC代码:

    #include <bits/stdc++.h>
    using namespace std;
    const int N=10010;
    const int M=2*N;
    int c[M],a[N],b[N],len1,len2;
    char s1[N],s2[N];
    int main()
    {
        cin>>s1+1>>s2+1;
        len1=strlen(s1+1);
        len2=strlen(s2+1);
        for(int i=1;i<=len1;i++)
            a[len1-i+1]=s1[i]-'0';
        for(int i=1;i<=len2;i++)
            b[len2-i+1]=s2[i]-'0';
        for(int i=1;i<=len1;i++)    
            for(int j=1;j<=len2;j++)
            {
                c[i+j-1]+=a[i]*b[j];
                c[i+j]+=c[i+j-1]/10;
                c[i+j-1]%=10;
            }
        int len=len1+len2-1;//也是非常巧妙的地方,记住就ok,而且也不难理解,自己比划比划就知道了
        if(c[len+1]!=0) len++;//判断一下,要是还有进位保留在len+1的位置,说明len+1位置也有数,就让len++
        for(int i=len;i>=1;i--)//因为高索引是高位,输出的时候要先输出高位,因此先输出高索引。
            cout<<c[i];
        return 0;
    }
    

    更"简洁"的AC代码:

    #include <bits/stdc++.h>
    using namespace std;
    const int N=10010;
    const int M=2*N;
    int c[M],a[N],b[N];
    char s1[N],s2[N];
    int alen,blen,tmp;
    int main()
    {
        cin>>s1+1>>s2+1;
        int len1=strlen(s1+1);
        int len2=strlen(s2+1);
        for(int i=len1;i>=1;i--,tmp*=10)
            if((len1-i)%4==0)
                a[++alen]=s1[i]-'0',tmp=1;
            else
                a[alen]=(s1[i]-'0')*tmp+a[alen];
        for(int i=len2;i>=1;i--,tmp*=10)
            if((len2-i)%4==0)
                b[++blen]=s2[i]-'0',tmp=1;
            else
                b[blen]=(s2[i]-'0')*tmp+b[blen];
        for(int i=1;i<=alen;i++)
            for(int j=1;j<=blen;j++)
            {
                c[i+j-1]+=a[i]*b[j];
                c[i+j]+=c[i+j-1]/10000;
                c[i+j-1]%=10000;
            }
        int len=alen+blen-1;
        if(c[len+1]!=0)
            len++;
        for(int i=1;i<=len;i++)
            if(i!=1)
                printf("%04d",c[len-i+1]);//重点!当遍历到非最高四位时,要保证输出4位,不足4位前面补零
            else
                cout<<c[len];//最高四位,直接输出,不带0
        return 0;
    }
    

    注意!注意!史无前例的"简洁"AC代码即将来袭!

    #include <iostream>
    #include <cstring>
    #define MAXSIZE 20
    #define MAXOUTSIZE MAXSIZE * 2 + 1
    using namespace std;
    int main()
    {
        char a[MAXSIZE] = {'0'},
             b[MAXSIZE] = {'0'},
             c[MAXOUTSIZE] = {'\0'};
        int a_int[MAXSIZE] = {0},
            b_int[MAXSIZE] = {0},
            c_int[MAXOUTSIZE] = {0};
        cin >> a;
        cin >> b;
        int len_a = strlen(a), len_b = strlen(b);
        memset(a_int, 0, sizeof a_int);
        memset(b_int, 0, sizeof b_int);
        memset(c_int, 0, sizeof c_int);
        //末位对齐
        for (int i = len_a - 1, j = 0; i >= 0; i--, j++)
        {
            a_int[j] = a[i] - '0';
        }
        for (int i = len_b - 1, j = 0; i >= 0; i--, j++)
        {
            b_int[j] = b[i] - '0';
        }
        //计算每一位,但是不处理进位
        for (int i = 0; i < len_a; i++)
        {
            for (int j = 0; j < len_b; j++)
            {
                c_int[i + j] += a_int[i] * b_int[j];
            }
        }
        //处理进位
        int ans_len = 0;
        for (int i = 0; i < 2 * MAXSIZE; i++)
        {
            c_int[i + 1] += c_int[i] / 10;
            c_int[i] %= 10;
            ans_len = i;
        }
        //移除序列高位的0,实际上是统计非0位数
        while (c_int[ans_len] == 0)
        {
            ans_len--;
        }
        if (ans_len < 0)
        {
            cout << "0";
            return 0;
        }
        for (int i = ans_len; i >= 0; i--)
        {
            c[i] = c_int[i] + '0';
        }
        for (int i = MAXOUTSIZE - 1; i >= 0; i--)
        {
            if ('\0' != c[i])
            {
                cout << c[i];
            }
        }
        return 0;
    }
    
    • @ 2023-8-20 16:58:19

      越简洁代码还越复杂,这不是学霸是学神

    • @ 2023-8-28 17:01:30

      @ 对对对!

    • @ 2023-11-27 17:46:05

      《真·简洁》(我真的服了,直接用long long不就行了吗)

  • 2
    @ 2024-2-20 19:43:09
    //惊:这是四星题单的题???
    #include<iostream>
    using namespace std;
    long long a,b;//好吧,上long long
    int main(){
        cin>>a>>b;
        cout<<a*b;//其实不用变量存储,可以直接输出(节省空间)
        return 0;
    }//原题:计算乘积
    //编者:@Royal
    
  • 2
    @ 2024-2-5 15:16:02
    #include <bits/stdc++.h>
    using namespace std;
    
    const int MAXN = 200 + 4;
    char s1[MAXN] = {}; 
    char s2[MAXN] = {};
    int a[MAXN] = {};
    int b[MAXN] = {};
    int c[2 * MAXN] = {}; 
    
    int main()
    {
    	scanf("%s %s", s1, s2);
    	
    	
    	bool flaga = false; 
    	if ('-' == s1[0])
    	{
    		flaga = true;
    		strcpy(s1, &s1[1]);
    	}
    	bool flagb = false;
    	if ('-' == s1[0])
    	{
    		flaga = true;
    		strcpy(s1, &s1[1]); 
    	}
    	
    	if ((true == flaga && false == flagb) || (false == flaga && true == flagb))
    		printf("-");
    	
    	int lena = strlen(s1);
    	for (int i = 0; i < lena; i++)
    	{
    		a[lena - i - 1] = s1[i] - '0';
    	}
    	
    	int lenb = strlen(s2);
    	for (int i = 0; i < lenb; i++)
    	{
    		b[lenb - i - 1] = s2[i] - '0';
    	}
    	
    	int jw; 
    	for (int i = 0; i < lena; i++)
    	{
    		jw = 0;
    		for (int j = 0; j < lenb; j++)
    		{
    			
    			c[i + j] = a[i] * b[j] + jw + c[i + j];  
    			jw = c[i + j] / 10; 
    			c[i + j] %= 10; 
    		}
    		c[i + lenb] = jw;
    	}
    	int lenc = lena + lenb;
    	for (int i = lenc - 1; i >= 0; i--)
    	{
    		
    		if (0 == c[i] && lenc > 1)
    			lenc--;
    		else{
                break;
            }
    			 
    	} 
    	for (int i = lenc - 1; i >= 0; i--)
    		printf("%d", c[i]); 
    	return 0;
    }
    
    • 2
      @ 2023-11-26 15:43:35
      #include <bits/stdc++.h>//导入万能头文件
      using namespace std;
      int main(){
          long long a,b;//当数据范围超出的时候,可以使用long long类型
          cin >> a >> b;
          cout << a*b;
          return 0;
      }
      //非常简单
      
      • 1
        @ 2024-4-4 16:05:59

        全宇宙最简Python AC代码(可复制)

        print(next(map(lambda s:s[0]*s[1],[list(map(int,input().split()))])))
        

        全宇宙最简Python AC代码(可复制)

        全宇宙最简C++ AC代码(可复制)

        #include<iostream>
        using namespace std;int main(){long a,b;cin>>a>>b;cout<<a*b;}
        

        全宇宙最简C++ AC代码(可复制)

        • 1
          @ 2024-3-10 9:24:33

          用“long long”数据类型就行。

          #include <bits/stdc++.h>
          using namespace std;
          int main()
          {
              long long a,b;
              cin>>a>>b;
              cout<<a*b;
              return 0;
          }
          
          • 1
            @ 2023-3-27 13:21:52

            太简单了,我就不写代码了(懒),我就说一句,要用long long 类型。

            • 0
              @ 2024-4-18 20:15:44

              很简单

              long long a,b;//定义俩变量
              cin>>a>>b;//输入
              cout<<a*b;//输出
              
              • 0
                @ 2024-4-10 20:46:02
                #include <bits/stdc++.h>
                using namespace std;
                int main()
                {
                    long long a,b;//计算出来的结果有点大,所以用long long
                    cin>>a>>b;
                    cout<<a*b;
                }
                
                • 0
                  @ 2023-11-4 20:23:48

                  这道题很简单,都给了提示,直接用long long就行

                  #include <bits/stdc++.h>
                  using namespace std;
                  int main()
                  {
                      long long a,b;
                      cin>>a>>b;
                      cout<<a*b;
                      return 0;
                  }
                  
                  • 0
                    @ 2023-9-3 16:10:24
                    #include <bits/stdc++.h>
                    using namespace std;
                    int main()
                    {
                        long long a, b;
                        cin >> a >> b;
                        cout << a * b;
                    	return 0;
                    }
                    
                    • 0
                      @ 2023-9-3 14:20:28

                      #include <iostream> using namespace std; int main() { int a,b; cin>>a>>b; cout<<a*b; return 0; }

                      • 0
                        @ 2023-8-29 22:17:12

                        过辣!(用long long会好点)

                            long long a,b;
                            cin>>a>>b;
                            cout<<a*b;
                        
                        • 0
                          @ 2023-8-28 17:02:22
                          #include <iostream>
                          using namespace std;
                          int main()
                          {
                              long long a,b;
                              cin >> a >> b;
                              cout << a*b;
                          return 0;
                          }
                          

                          求赞! 已AC

                          • 0
                            @ 2023-8-19 18:18:16

                            《极速版》

                            #include <bits/stdc++.h>//好习惯
                            using namespace std;
                            int main()
                            {
                                long long a, b;
                                cin >> a >> b;
                                cout << a * b;
                                return 0;//又是一个好习惯
                            }
                            

                            已AC🚀️

                            • 0
                              @ 2023-8-4 20:36:23

                              👀️ 看不见我看不见我

                              #include <bits/stdc++.h>
                              using namespace std;
                              int main()
                              {
                                  long long a , b;
                                  cin >> a >> b;
                                  cout << a * b;
                                  return 0;
                              }
                              
                              • 0
                                @ 2023-8-3 21:00:46
                                #include <bits/stdc++.h>
                                using namespace std;
                                int main()
                                {
                                    long long a, b;
                                    cin >> a >> b;
                                    cout << a * b;
                                	return 0;
                                }
                                
                                • 0
                                  @ 2023-7-16 19:25:38
                                  #include <bits/stdc++.h>
                                  using namespace std;
                                  int main()
                                  {
                                      long long a,b;
                                      cin>>a>>b;
                                      cout<<a*b;
                                  }
                                  
                                  • 0
                                    @ 2023-5-6 20:49:43
                                    #include <bits/stdc++.h>
                                    using namespace std;
                                    int main()
                                    {
                                        long long a,b;
                                        cin >> a >> b;
                                        cout << a*b;
                                        return 0; 
                                    }
                                    

                                    信息

                                    ID
                                    1295
                                    时间
                                    1000ms
                                    内存
                                    256MiB
                                    难度
                                    2
                                    标签
                                    递交数
                                    2424
                                    已通过
                                    1430
                                    上传者