40分的代码,编程初学者,只会这种简单的,求高人指点orz

P1303 A*B Problem

Eternally__ @ 2023-07-23 09:06:44


# include<iostream>
using namespace std;
int main()
{
    int a,b,c;
    cin>>a>>b;
    if(a<=10^2020){
        if(b<=10^2020){
            if(a>=0){
                if(b>=0){
                                        cout<<a*b;              
                    }
            }
            else
            {
                cout<<"请输入非负整数";
            }
        }
    }
    else{
        cout<<"请输入非负整数";
    }
    return 0;
}

by timmark @ 2023-07-23 10:08:04

那啥,10^2020 是异或的意思,异或是一种位运算。C++ 默认是没有幂运算的。

建议学一下高精。


by timmark @ 2023-07-23 10:09:50

另外,落谷的数据一般都是符合数据访问的,不会出现有问题的情况,不要输出这种提示信息,会被评测姬判为 Wrong Answer。


by He_JJ @ 2023-08-04 15:50:22

你得用高精度就是用程序来做列乘法竖式 我一会给你个高精度乘模版


by jxqWa @ 2023-08-11 09:55:28

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
char a1[10001],b1[10001];
int a[10001],b[10001],i,x,len,j,c[10001];
int main(){
    scanf("%s %s",a1,b1);//输入字符串
    int len1=strlen(a1);
    int len2=strlen(b1);
    for(i=1;i<=len1;i++){
        a[i]=a1[len1-i]-'0';//将字符串录入数组
    }
    for(i=1;i<=len2;i++){
        b[i]=b1[len2-i]-'0';
    }
    for(i=1;i<=len2;i++){
        for(j=1;j<=len1;j++){
            c[i+j-1]+=a[j]*b[i];//乘法竖式操作
        }
    }
    for(i=1;i<len1+len2;i++){//进位处理
        if(c[i]>9){
            c[i+1]+=c[i]/10;
            c[i]%=10;
        }
    }
    len=len1+len2;
    while(c[len]==0&&len>1){//判断首位是否为0,为0则删除一位
        len--;
    }
    for(i=len;i>=1;i--){//输出结果
        printf("%d",c[i]);
    }
return 0;
}

by biangbiangli @ 2023-08-21 11:49:05

10^2000在C++里面是10异或2000,不是10的2000次方!

(其实用Python 3可以一行水过的)


by biangbiangli @ 2023-08-21 11:55:15

用 Python 3

print( int (input) * int (input) )

by pengrongxuan @ 2023-08-28 07:31:32

@timmark 意思是10 xor 2020 可以上网搜


by pengrongxuan @ 2023-08-28 07:32:50

@timmark pow好像可以


上一页 |