首页 > 其他 > 详细

PAT A1023 Have Fun with Numbers

时间:2020-08-26 12:55:45      阅读:81      评论:0      收藏:0      [点我收藏+]

技术分享图片

这一道大数乘法问题,要注意输入是按照字符串进行读入并且为了满足大小位关系采用逆序转换
要注意数组的意义以及循环结构和判断结构的边界
代码如下:

#include<cstdio>
#include<string.h>

using namespace std;

const int N = 30;
struct bign{
    int k[N];
    int len;
    bign(){
        memset(k,0,sizeof(k));
        len = 0;
    };
};
int flag[10];//初值全为0
bign change(char s[]){
    bign a;
    a.len = strlen(s);
    for(int i = 0;i<a.len;i++){
        a.k[i] = s[a.len-1-i] - ‘0‘;//逆序赋值
    }
    return a;
}
bign doublemulit(bign a){
    bign b;
    int temp=0;
    for(int i = 0;i<a.len;i++){
        temp += a.k[i]*2;
        b.k[i] = temp%10;//余数
        temp /=10;//进位
        b.len++;
    }
    while(temp!=0){//处理超位情况
        b.k[b.len] = temp%10;
        temp /= 10;
        b.len++;
    }
    return b;
}

int main(){
    char s1[N];
    scanf("%s",s1);
    bign a = change(s1);
    for(int i = 0;i<a.len;i++){
        flag[a.k[i]]++;
    }
    bign b = doublemulit(a);
    bool flagi=true;
 
     for(int i = 0;i<b.len;i++){
            if(flag[b.k[i]]<=0){
                printf("No");
                flagi = false;
                break;
            }else{
                flag[b.k[i]]--;
            }
     }
     if(flagi==true) printf("Yes");
    
    printf("\n");
    for(int i = b.len-1;i>=0;i--){
        printf("%1d",b.k[i]);
    }
    return 0;
}

PAT A1023 Have Fun with Numbers

原文:https://www.cnblogs.com/shuibeng/p/13564350.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!